ホームページ  >  記事  >  マルチスレッド同期メカニズムには何が含まれますか?

マルチスレッド同期メカニズムには何が含まれますか?

coldplay.xixi
coldplay.xixiオリジナル
2021-01-07 15:24:197590ブラウズ

マルチスレッド同期メカニズムには次のものが含まれます: 1. 「排他的所有」を実現するために使用されるクリティカル セクション (クリティカル セクション); 2. 限られたリソースを追跡するために使用されるセマフォ; 3. さまざまな環境で使用できるミューテックススレッド スレッドが異なるプロセスに属している場合でも、スレッド間で「排他的所有」を実現するため。 4. イベント。通常はオーバーラップ I/O に使用されるか、カスタム同期オブジェクトの設計に使用されます。

マルチスレッド同期メカニズムには何が含まれますか?

#この記事の動作環境: Windows 7 システム、Dell G3 コンピューター。

マルチスレッド同期メカニズムには次のものが含まれます:

1、クリティカル セクション

クリティカル セクション (クリティカル セクション) は、次の目的で使用されます。 「独占占有」を実現します。適用範囲は単一プロセスのスレッド間です。それは:

  • ローカル オブジェクトであり、コア オブジェクトではありません。

  • 高速かつ効率的。

  • 複数のクリティカル セクションを同時に待つことはできません。

  • スレッドによって放棄されたかどうかを検出できません。

  • はスレッド間の相互排他を実現できますが、同期を実現するために使用することはできません。

2、セマフォ

セマフォは、限られたリソースを追跡するために使用されます。それは:

  • #コア オブジェクトです。

  • 所有者がいません。

  • には名前を付けることができるため、他のプロセスで開くことができます。

  • どのスレッドでも解放できます。

  • スレッド間の排他とスレッド間の同期を実現できます。

  • プロセス間で使用すると、セマフォを所有するスレッドが予期せず終了しても、他のプロセスには通知されません。

3,

Mutex

Mutex は、異なるプロセスに属するスレッドであっても、異なるスレッド間で「排他的所有」を実現できるコア オブジェクトです。 。それは:

    #コア オブジェクトです。
  • ミューテックスを所有するスレッドが終了すると、「放棄された」エラー メッセージが生成されます。
  • i には名前を付けることができるため、他のプロセスによって開くことができます。
  • は、それを所有するスレッドによってのみ解放できます。
  • プロセス間で使用すると、ミューテックスを所有するプロセスが予期せず終了すると、他のプロセスは
  • WAIT_ABANDOEND

    メッセージを受け取ります。

  • 4、
Event

Event オブジェクトは、通常、オーバーラップ I/O またはいくつかのカスタム同期オブジェクトを設計するために使用されます。それは:

    コア オブジェクトです。
  • は、スレッドの相互排他と同期を実現するために使用されます。
  • には名前を付けることができるため、他のプロセスで開くことができます。
  • プロセス間で使用すると、セマフォを所有するスレッドが予期せず終了しても、他のプロセスには通知されません。
  • 注: クリティカル セクションとミューテックスは両方とも「スレッド所有権」の概念を持っているため、スレッド間の同期を実現するために使用することはできません。相互排他を実装するためにのみ使用できます。その理由は、クリティカル セクションまたはミューテックスを作成するスレッドは、
LeaveCriticalSection()

SetEvent() を待たずに無条件で保護されたプログラム セクションに入ることができるためです。これは、この権限を持っているためです。さらに、ミューテックスは「放棄」操作を非常にうまく処理できます。スレッドがオブジェクトを解放せずに予期せず終了した場合、他のスレッドは WAIT_ABANDONED_0 を待つことができます。しかし、イベントもセマフォもそれを行うことはできません。 イベントとセマフォは、スレッドとプロセス間の相互排他と同期を実現できます。

使用効率の観点から見ると、クリティカル セクションはカーネル オブジェクトではないため最も効率が高く、他の 3 つはコア オブジェクトであり、オペレーティング システムの助けを借りて実装する必要があるため、効率は比較的低いです。

ただし、プロセス間で使用したい場合は、やはりミューテックス、イベント オブジェクト、セマフォを使用する必要があります。

要するに: 設計するときは、まずグローバル変数を使用しないようにしてください。使用しない場合は、Inter...() 関数、次にクリティカル セクション オブジェクト、最後にイベント、ミューテックス、シグナルの使用を検討してください。

以上がマルチスレッド同期メカニズムには何が含まれますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。