名前空間
変種
操作

std::binary_semaphore

提供: cppreference.com
< cpp‎ | thread
 
 
スレッドサポートライブラリ
スレッド
(C++11)
(C++20)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
binary_semaphore
(C++20)
ラッチとバリア
(C++20)
(C++20)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
 
ヘッダ <semaphore> で定義
using binary_semaphore = std::counting_semaphore<1>;
(C++20以上)

binary_semaphore は共有リソースへのアクセスを制御できる軽量な同期プリミティブです。 これは least_max_value1std::counting_semaphore へのエイリアスです。

std::mutex と異なり、 binary_semaphore はスレッドに結び付けられません。 例えば、セマフォの取得と解放を異なるスレッドで行うことができます。 binary_semaphore に対するすべての操作は並行的に実行でき、特定のスレッドといかなる関連も持ちません。 ただし、デストラクタを並行的に実行することはできません (構築と異なるスレッドで実行することはできます)。

binary_semaphore はコンストラクタによって初期化されるカウンタを内部に持ちます。 このカウンタは acquire() およびその関連のメソッドによってデクリメントされ、 release() によってインクリメントされます。 カウンタがゼロのときは、 acquire() はカウンタがデクリメントされるまでブロックしますが、 try_acquire() はブロックしません。 try_acquire_for() および try_acquire_for() はカウンタがデクリメントされるかタイムアウトが満了するまでブロックします。

std::condition_variablewait() と同様に、 binary_semaphoretry_acquire() はスプリアスに失敗することがあり、使用に注意が必要です。

std::binary_semaphoreDefaultConstructible でも CopyConstructible でも MoveConstructible でも CopyAssignable でも MoveAssignable でもありません。

目次

[編集] メンバ関数

binary_semaphore を構築します
(パブリックメンバ関数) [edit]
binary_semaphore を破棄します
(パブリックメンバ関数) [edit]
operator=
[削除]
コピー代入可能ではありません
(パブリックメンバ関数) [edit]
操作
内部カウンタをインクリメントし、取得者のブロックを解除します
(パブリックメンバ関数) [edit]
内部カウンタをデクリメントします。 できない場合はできるまでブロックします
(パブリックメンバ関数) [edit]
ブロックせずに内部カウンタのデクリメントを試みます
(パブリックメンバ関数) [edit]
内部カウンタのデクリメントを試みます。 指定した時間ブロックします
(パブリックメンバ関数) [edit]
内部カウンタのデクリメントを試みます。 指定した時点までブロックします
(パブリックメンバ関数) [edit]

定数

[静的]
内部カウンタの可能な最大値を返します
(パブリック静的メンバ関数) [edit]

[編集] ノート

処理系は std::counting_semaphore のデフォルトの実装より効率的に binary_semaphore を実装するかもしれません。

[編集]