Trả lời: không có. Đó không phải là những phần của Nghệ thuật lập trình đa bộ xử lý của Herlihy và Shavit. Trong các chương về loại trừ lẫn nhau Herlihy và Shavit không cung cấp cho bạn các lựa chọn thay thế cho pthread
thư viện, họ đang chỉ cho bạn cách nó triển khai tương đương với pthread
thư viện.
Chương 2 của Herlihy và Shavit có tiêu đề "Loại trừ lẫn nhau". Nó cung cấp một loạt các thuật toán cổ điển để thực hiện tương đương pthread_mutex_lock()
với chỉ bộ nhớ chia sẻ nhất quán liên tục. Câu trả lời của tôi https://cs.stackexchange.com/a/12632/7459 và https://cs.stackexchange.com/a/30249/7459 thảo luận về tầm quan trọng của những triển khai này và có một con trỏ tới một thực tế cho sử dụng trên các máy không có hoạt động đồng bộ hóa phần cứng tích hợp. (Bài viết năm 1987 của Lamport trong ACM Trans. Trên Hệ thống máy tính).
Chương 7 của Herlihy và Shavit cung cấp nhiều cách triển khai khóa xoay và hàng đợi tương đương pthread_mutex_lock()
, và Chương 8 mở rộng để thảo luận pthread_cond_t
(các biến điều kiện), pthread_rwlock_t
(khóa đầu đọc / ghi) và chạm nhanh vào semaphores
. Có thể có các tình huống pthread_rwlock_t
có thể được sử dụng thay thế pthread_lock_t
cho lý do hiệu suất (nhưng thường là không) và trong Posix bạn cần sử dụng semaphores
để đồng bộ hóa giữa các quá trình.
Chương 9 đến 16 chủ yếu thảo luận về các ứng dụng (các loại container đồng thời). Chương 17 thảo luận ngắn gọn về tương đương pthread_barrier_t
.
Tất cả những gì đã nói, Herlihy và Shavit là hai trong số những người đề xướng nhiều nhất về bộ nhớ giao dịch và một loạt các loại đồng bộ hóa không chặn (và chờ đợi). Những kỹ thuật này được dự định là giải pháp thay thế cho loại trừ lẫn nhau trong một số trường hợp nhất định. Herlihy và Shavit rắc các triển khai không chặn khác nhau trong suốt các Chương 9 đến 16, và sau đó đi vào chi tiết về bộ nhớ giao dịch trong Chương 18.
Bộ nhớ giao dịch và các kỹ thuật đồng bộ hóa không chặn khác nhằm giải quyết vấn đề một số thuật toán được thiết kế kém đòi hỏi các luồng phải giữ các phần quan trọng của chúng trong một thời gian rất dài. Bộ nhớ giao dịch và đồng bộ hóa thực sự không chặn hiện không phải là giải pháp thay thế thực tế trong mọi tình huống thực tế, nhưng các kỹ thuật chuyển đổi cấu trúc dữ liệu thành cấu trúc dữ liệu không chặn rất hữu ích trong thực tế để giảm thiểu thời gian cấu trúc dữ liệu chặn vẫn ở mức quan trọng phần. (Thường thì bạn có thể giảm kích thước của phần quan trọng xuống chỉ còn một vài hướng dẫn máy.)