回答:なし。それは、HerlihyとShavitのThe Art of Multiprocessor Programmingに関するセクションではありません。相互排除に関する章では、HerlihyとShavitはpthread
ライブラリに代わるものを提供しておらず、ライブラリと同等のものを実装する方法を示していますpthread
。
HerlihyとShavitの第2章のタイトルは「相互排除」です。pthread_mutex_lock()
逐次一貫した共有メモリのみと同等のものを実装するためのさまざまなクラシックアルゴリズムを提供します。私の回答https://cs.stackexchange.com/a/12632/7459およびhttps://cs.stackexchange.com/a/30249/7459は、これらの実装の重要性について説明しており、実用的な実装へのポインタを持っていますハードウェア同期操作が組み込まれていないマシンで使用します。(Lamportの1987年のACM Trans。on Computer Systemsの論文)。
HerlihyおよびShavitの第7章ではpthread_mutex_lock()
、と同等のさまざまなスピンロックおよびキューロックの実装を提供し、第8章ではpthread_cond_t
(条件変数)、pthread_rwlock_t
(リーダー/ライターロック)について説明し、に簡単に触れsemaphores
ます。パフォーマンス上の理由で(通常はそうではない)のpthread_rwlock_t
代替として使用できる状況がありpthread_lock_t
、Posixではsemaphores
プロセス間同期に使用する必要がある場合があります。
第9章から第16章では、主にアプリケーション(さまざまな種類の同時コンテナ)について説明します。第17章では、の同等物について簡単に説明しpthread_barrier_t
ます。
そうは言っても、HerlihyとShavitは、トランザクションメモリとさまざまな種類の非ブロッキング(および待機なし)同期の最も声高な提案者の2つです。これらの手法は、特定の場合に相互排除の代替手段として意図されています。HerlihyとShavitは、第9章から第16章までのさまざまな非ブロッキング実装を散りばめ、第18章でトランザクションメモリの詳細について説明します。
トランザクションメモリおよびその他の非ブロッキング同期手法は、一部の不適切に設計されたアルゴリズムが、クリティカルセクションを非常に長時間保持する必要のあるスレッドの問題に対処することを目的としています。トランザクションメモリと真にノンブロッキングの同期は、現在、実際の状況では実用的な代替手段ではありませんが、ブロッキングデータ構造をノンブロッキングデータ構造に変換する手法は、ブロッキングデータ構造がクリティカルにとどまる時間を最小限に抑えるために実際に役立ちます。セクション。(多くの場合、クリティカルセクションのサイズをいくつかの機械語命令に減らすことができます。)