Jawab: tidak ada. Bukan itu yang dimaksud dengan bagian dari Seni Pemrograman Multi-Prosesor Herlihy dan Shavit. Dalam bab-bab tentang pengecualian bersama, Herlihy dan Shavit tidak memberi Anda alternatif untuk pthread
perpustakaan, mereka menunjukkan kepada Anda bagaimana penerapannya setara dengan pthread
perpustakaan.
Bab 2 Herlihy dan Shavit berjudul "Pengecualian Saling." Ini memberikan berbagai algoritma klasik untuk mengimplementasikan yang setara pthread_mutex_lock()
dengan hanya memori bersama yang konsisten. Jawaban saya https://cs.stackexchange.com/a/12632/7459 dan https://cs.stackexchange.com/a/30249/7459 membahas pentingnya implementasi ini, dan memiliki petunjuk ke salah satu yang praktis untuk gunakan pada mesin yang tidak memiliki operasi sinkronisasi perangkat keras bawaan. (Kertas Lamport 1987 dalam ACM Trans. On Computer Systems).
Bab 7 dari Herlihy dan Shavit memberikan berbagai implementasi putaran dan kunci antrian yang setara dengan pthread_mutex_lock()
, dan Bab 8 memperluas untuk membahas pthread_cond_t
(variabel kondisi), pthread_rwlock_t
(pembaca / penulis mengunci), dan secara singkat menyentuh semaphores
. Mungkin ada situasi di mana pthread_rwlock_t
dapat digunakan sebagai alternatif pthread_lock_t
untuk alasan kinerja (tetapi biasanya tidak) dan di Posix Anda perlu menggunakan semaphores
untuk sinkronisasi antar-proses.
Bab 9 hingga 16 sebagian besar membahas aplikasi (berbagai jenis wadah bersamaan). Bab 17 secara singkat membahas hal yang setara dengan pthread_barrier_t
.
Semua yang dikatakan, Herlihy dan Shavit adalah dua pendukung memori transaksional yang paling vokal dan berbagai jenis sinkronisasi non-blocking (dan tunggu-bebas). Teknik-teknik ini dimaksudkan sebagai alternatif untuk saling pengecualian dalam kasus-kasus tertentu. Herlihy dan Shavit menaburkan berbagai implementasi non-blocking di seluruh Bab 9 hingga 16, dan kemudian merinci memori transaksional dalam Bab 18.
Memori transaksional dan teknik sinkronisasi non-pemblokiran lainnya dimaksudkan untuk mengatasi masalah yang memerlukan beberapa algoritme yang tidak dirancang dengan baik untuk menahan bagian-bagian penting mereka untuk waktu yang sangat lama. Memori transaksional dan sinkronisasi yang benar-benar non-blocking saat ini bukanlah alternatif praktis dalam situasi nyata apa pun, tetapi teknik untuk mengubah struktur data blocking menjadi struktur data non-blocking berguna dalam praktiknya untuk meminimalkan jumlah waktu struktur data blocking tetap berada dalam kondisi kritis. bagian. (Seringkali Anda dapat mengurangi ukuran bagian kritis menjadi hanya beberapa instruksi mesin.)