Apa relevansi praktis dari algoritma saling pengecualian buku teks?

8

Sudah ada cukup banyak penelitian tentang algoritma pengecualian bersama - misalnya banyak yang disajikan dalam buku teks klasik seperti The Art of Multiprocessor Programming , di mana seluruh bab dikhususkan untuk mereka.

Saya bertanya-tanya apa saja situasi praktis di mana seseorang mungkin membutuhkan algoritma ini selama rekayasa sistem bersamaan, daripada menggunakan bahasa primitif sinkronisasi yang disediakan OS dan OS (katakanlah, disediakan oleh pthread library)?

Saya dapat memikirkan banyak kasus khusus di mana saya membayangkan standar primitif tidak secara khusus disesuaikan untuk mereka, misalnya "satu pembaca yang sering dan satu penulis yang jarang", atau sebaliknya, atau "persis satu operasi penulisan, banyak pembaca", dll. - Apakah ada algoritma saling pengecualian buku teks yang secara signifikan lebih baik dalam praktiknya dalam situasi seperti itu?

Singkatnya: Algoritma mutual exclusion mutual mana yang memiliki relevansi praktis untuk seorang insinyur yang sudah memiliki perpustakaan khusus konkurensi konkurensi yang disediakan dalam bahasa mereka?

Jkff
sumber
ini adalah bidang penelitian aktif beberapa dekade lalu dalam menciptakan "primitif" ini dan telah banyak berubah dalam praktik rekayasa. juga beberapa di antaranya merupakan karya teoretis tentang kemungkinan yang belum tentu dimaksudkan untuk diterapkan secara praktis. beberapa konstruksi agak buatan dan menjawab pertanyaan teoretis terbuka. mereka adalah latihan yang berguna dalam memahami banyak seluk beluk mengejutkan dan membangun intuisi di area tersebut.
vzn

Jawaban:

6

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 pthreadperpustakaan, mereka menunjukkan kepada Anda bagaimana penerapannya setara dengan pthreadperpustakaan.

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_tdapat digunakan sebagai alternatif pthread_lock_tuntuk alasan kinerja (tetapi biasanya tidak) dan di Posix Anda perlu menggunakan semaphoresuntuk 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.)

Logika Pengembaraan
sumber