マルチスレッド同期メカニズムには次のものが含まれます: 1. 「排他的所有」を実現するために使用されるクリティカル セクション (クリティカル セクション); 2. 限られたリソースを追跡するために使用されるセマフォ; 3. さまざまな環境で使用できるミューテックススレッド スレッドが異なるプロセスに属している場合でも、スレッド間で「排他的所有」を実現するため。 4. イベント。通常はオーバーラップ I/O に使用されるか、カスタム同期オブジェクトの設計に使用されます。
#この記事の動作環境: Windows 7 システム、Dell G3 コンピューター。
マルチスレッド同期メカニズムには次のものが含まれます:
1、クリティカル セクション
クリティカル セクション (クリティカル セクション) は、次の目的で使用されます。 「独占占有」を実現します。適用範囲は単一プロセスのスレッド間です。それは:
ローカル オブジェクトであり、コア オブジェクトではありません。
高速かつ効率的。
複数のクリティカル セクションを同時に待つことはできません。
スレッドによって放棄されたかどうかを検出できません。
はスレッド間の相互排他を実現できますが、同期を実現するために使用することはできません。
2、セマフォ
セマフォは、限られたリソースを追跡するために使用されます。それは:
Mutex
メッセージを受け取ります。
Event オブジェクトは、通常、オーバーラップ I/O またはいくつかのカスタム同期オブジェクトを設計するために使用されます。それは:
、SetEvent()
を待たずに無条件で保護されたプログラム セクションに入ることができるためです。これは、この権限を持っているためです。さらに、ミューテックスは「放棄」操作を非常にうまく処理できます。スレッドがオブジェクトを解放せずに予期せず終了した場合、他のスレッドは WAIT_ABANDONED_0
を待つことができます。しかし、イベントもセマフォもそれを行うことはできません。 イベントとセマフォは、スレッドとプロセス間の相互排他と同期を実現できます。
使用効率の観点から見ると、クリティカル セクションはカーネル オブジェクトではないため最も効率が高く、他の 3 つはコア オブジェクトであり、オペレーティング システムの助けを借りて実装する必要があるため、効率は比較的低いです。
ただし、プロセス間で使用したい場合は、やはりミューテックス、イベント オブジェクト、セマフォを使用する必要があります。
要するに: 設計するときは、まずグローバル変数を使用しないようにしてください。使用しない場合は、Inter...() 関数、次にクリティカル セクション オブジェクト、最後にイベント、ミューテックス、シグナルの使用を検討してください。
以上がマルチスレッド同期メカニズムには何が含まれますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。