std::condition_variable_any
| ヘッダ <condition_variable> で定義
|
||
class condition_variable_any; |
(C++11以上) | |
condition_variable_any クラスは std::condition_variable の一般化です。 std::condition_variable が std::unique_lock<std::mutex> との組み合わせでのみ使用できるのに対して、 condition_variable_any は BasicLockable の要件を満たす任意のロックに対して使用できます。
条件変数のセマンティクスの説明については std::condition_variable を参照してください。
クラス std::condition_variable_any は StandardLayoutType です。 CopyConstructible でなく、 MoveConstructible でもなく、 CopyAssignable でもなく、 MoveAssignable でもありません。
ロックが std::unique_lock の場合は、 std::condition_variable の方が良い性能を発揮するかもしれません。
メンバ関数
| オブジェクトを構築します (パブリックメンバ関数) | |
| オブジェクトを破棄します (パブリックメンバ関数) | |
operator= [削除] |
コピー代入可能ではありません (パブリックメンバ関数) |
通知 | |
| 待機中のスレッドひとつに通知します (パブリックメンバ関数) | |
| 待機中のスレッドすべてに通知します (パブリックメンバ関数) | |
待機 | |
| 条件変数が通知されるまで現在のスレッドをブロックします (パブリックメンバ関数) | |
| 条件変数が通知されるか指定時間が経過するまで現在のスレッドをブロックします (パブリックメンバ関数) | |
| 条件変数が通知されるか指定時点に達するまで現在のスレッドをブロックします (パブリックメンバ関数) | |
ノート
std::shared_mutex を共有所有権モードで待機するために std::shared_lock と組み合わせて std::condition_variable_any を使用することができます。
カスタム Lockable 型と組み合わせた std::condition_variable_any に対する使用例として、便利な割り込み可能な待機を提供することができます。 カスタムロック操作は、通常通りに関連付けられたミューテックスをロックし、さらに割り込み信号を受け取った時にこの条件変数に通知するために必要なセットアップを行います。 [1]
参考文献
- ↑ A. Williams (2012), "C++ concurrency in action" 9.2.4 Interrupting a wait on std::condition_variable_any