Sử dụng các loại duy nhất để thực hiện song song an toàn


19

Tôi đã quan tâm đến các loại duy nhất như là một thay thế cho các đơn nguyên trong các ngôn ngữ chức năng thuần túy trong một thời gian; thật không may, đây là một lĩnh vực bí truyền của nghiên cứu CS và các tài nguyên trực tuyến về lập trình với các loại duy nhất là rất ít.

Rõ ràng là các kiểu duy nhất có thể được sử dụng để triển khai các cấu trúc dữ liệu trạng thái như tham chiếu ("hộp") và mảng, mặc dù nó thoát khỏi cách bạn có thể triển khai các cấu trúc dữ liệu trạng thái phổ biến khác với chúng.

Có thể thực hiện, ví dụ, khóa với các loại duy nhất? Các loại duy nhất có thể được sử dụng để chia sẻ dữ liệu có thể thay đổi giữa các luồng không? Có thể sử dụng các loại duy nhất để xây dựng các nguyên hàm đồng bộ hóa (như mutexes), hoặc là thông điệp cần thiết?


Bạn có thể làm cho câu hỏi của bạn cụ thể hơn một chút? Điều gì, ví dụ, bạn đã biết về khóa với các loại duy nhất và kiến ​​thức của bạn không đủ ở đâu?
Robert Harvey

> Ví dụ, bạn đã biết gì về khóa với các loại duy nhất Tôi không biết gì về khóa với các loại duy nhất - Tôi thực sự không biết làm thế nào song song an toàn hoạt động với các loại duy nhất và tôi muốn biết nếu có là bất kỳ tài nguyên về chủ đề này.
Ricky Stewart


2
@RickyStewart: Có lẽ bạn đã biết Clean ( wiki.clean.cs.ru.nl/Clean ) rồi. Tôi chỉ muốn thêm liên kết vì bạn đã không đề cập đến nó.
Giorgio

Tôi nghĩ bạn nên xem xét các loại tuyến tính cho song song. Các loại duy nhất của IIRC được xây dựng trên các loại tuyến tính. Frank Pfenning có một số nội dung thú vị về chủ đề này
Daniel Gratzer

Câu trả lời:


2

Có thể thực hiện, ví dụ, khóa với các loại duy nhất?

Tôi đã theo liên kết mà Robert Harvey cung cấp và tôi đã đọc nhanh. Tôi không thể nói rằng tôi hiểu tất cả mọi thứ hoặc tôi có mức độ tự tin cao mà tôi thực sự hiểu những gì tôi nghĩ tôi đã hiểu, nhưng dường như toàn bộ quan điểm của tính độc đáo bên ngoài và tính bất biến tham chiếu là không cần phải khóa.

Các cách tiếp cận hiện đại để đa luồng cố gắng tránh bị khóa bởi vì chỉ những lập trình viên có kinh nghiệm cao mới có thể viết mã sử dụng khóa và thậm chí mã của họ rất dễ bị lỗi. Nếu bạn nói thêm rằng thực tế là mã khóa hầu như không thể kiểm chứng được, thì rõ ràng đó là một cách làm rất không mong muốn, và bất kỳ giải pháp nào nhằm giải phóng chúng tôi khỏi khóa đều hứa hẹn sẽ nói ít nhất.

Cách chúng tôi đã tránh bị khóa là với việc truyền tin nhắn, đòi hỏi các tin nhắn phải bất biến. Roughly, (thoạt nhìn,) tính bất biến tham chiếu dường như là một kỹ thuật có thể giúp chúng ta đảm bảo tính bất biến mà không phải thực sự xây dựng các loại bất biến, và tính độc đáo bên ngoài dường như là một kỹ thuật có thể giúp chúng ta thư giãn yêu cầu bất biến nghiêm ngặt cục bộ.

Các loại duy nhất có thể được sử dụng để chia sẻ dữ liệu có thể thay đổi giữa các luồng không?

Bài báo không nói rõ, nhưng theo những gì tôi hiểu, một cụm đối tượng độc đáo bên ngoài là luồng an toàn bởi vì bằng cách nào đó (thực sự, làm thế nào? ), Nó được đảm bảo rằng chỉ tồn tại một tham chiếu bên ngoài vào cụm đối tượng đó, có nghĩa là một luồng nhận được một tham chiếu như vậy có thể coi các đối tượng được tham chiếu là có thể thay đổi mà không phải lo lắng rằng một số luồng khác cũng có thể biến đổi chúng, bởi vì không có luồng nào khác có thể có một tham chiếu khác. Tôi sẽ tò mò muốn biết làm thế nào một cấu trúc lý thuyết như vậy có thể được thực hiện và thi hành.

Có thể sử dụng các loại duy nhất để xây dựng các nguyên hàm đồng bộ hóa (như mutexes), hoặc là thông điệp cần thiết?

Một lần nữa, từ những gì tôi hiểu, các loại độc đáo bên ngoài và tính bất biến tham chiếu có nghĩa là để hiển thị các khóa, mutexes và những thứ tương tự không cần thiết. Tin nhắn đi qua dường như là con đường để đi, và điều đó thật tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.