[win32] Semaphore
Windows の win32 における代表的な同期処理には以下の3つの手法があります。
ここでは下記から「3.
Semaphore」について記載します。
- Critical Section
- 1つのプロセスの中で複数のスレッド間の相互排他性を実現するために使われる。
- カーネルオブジェクトの中ではなくローカルオブジェクトである。
- 高速で効率が良い。
- 欠点: スレッドによって放棄されたかどうかを判定することができない。例えば、クリティカルセクション中のスレッドが
CriticalSection を開放しないまま異常終了してもOSはクリーンアップしない。これが問題となる場合は後述の Mutex を使用する。
- Mutex
- 異なるプロセスに属するスレッドも含めて、複数のスレッド間の相互排他性を実現するための仕組みである。
- カーネルオブジェクトである。
- 所有しているスレッドが終了すると ”放棄された” ことを示すエラーを生成する。
- 名前を持ち、複数のプロセスからオープンできる。
- それを所有するスレッドだけが解放できる。
- Semaphore
- 有限なリソースを追跡管理するために使用する。
- カーネルオブジェクトである。
- 所有者がいない。
- 名前を持ち、複数のプロセスからオープンできる。
- 任意のスレッドから解放できる。
目次
1. ***
2. ***
3. ***
1. ***
[概要]
[評価環境]
|
コンパイラ : |
Visual Studio 2019 pro., |
Version 16.4.0 |
|
OS: |
Windows10 home, |
Version 1909 |
|
[プログラムソース "***.cpp"]
サンプルプログラム
サンプルプログラム ダウンロード
参考
2. ***
[概要]
[評価環境]
|
コンパイラ : |
Visual Studio 2019 pro., |
Version 16.4.0 |
|
OS: |
Windows10 home, |
Version 1909 |
|
[プログラムソース "***.cpp"]
サンプルプログラム
サンプルプログラム ダウンロード
参考
記載: