std::atomic_flag_wait, std::atomic_flag_wait_explicit
From cppreference.com
| ヘッダー <atomic> で定義 |
||
| void atomic_flag_wait( const atomic_flag* object, bool old ) noexcept; |
(1) | (C++20以降) |
| void atomic_flag_wait( const volatile atomic_flag* object, bool old ) noexcept; |
(2) | (C++20以降) |
| void atomic_flag_wait_explicit( const atomic_flag* object, bool old, std::memory_order order ) noexcept; |
(3) | (C++20以降) |
| void atomic_flag_wait_explicit( const volatile atomic_flag* object, bool old, std::memory_order order ) noexcept; |
(4) | (C++20以降) |
アトミックな待機操作を実行します。
object->test(std::memory_order_seq_cst) または object->test(order) を old と比較し、それらが等しい場合は、std::atomic_flag::notify_one() または std::atomic_flag::notify_all() によって *object が通知されるまで(またはスレッドが誤って解除されるまで)ブロックします。これは、値が等しくなくなるまで繰り返されます。
1,2) メモリ同期順序はstd::memory_order_seq_cstです。
3,4) メモリ同期順序はorderです。
These functions are guaranteed to return only if value has changed, even if underlying implementation unblocks spuriously.
目次 |
[編集] パラメーター
| オブジェクト (object) | - | チェックおよび待機するアトミックフラグへのポインター |
| old | - | アトミックフラグがもはや含んでいない値をチェックします。 |
| order | - | メモリ同期順序 |
[編集] 戻り値
(なし)
[編集] 注記
この形式の変更検出は、単純なポーリングや純粋なスピンドックよりも効率的な場合が多いです。
ABA問題のため、old から別の値への一時的な変更、そして再び old に戻る変更は、見落とされる可能性があり、解除されない場合があります。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| (C++20) |
アトミックオブジェクトを待機しているスレッドを少なくとも1つ通知する ( std::atomic_flag の public メンバ関数) |
| (C++20) |
アトミックオブジェクトを待機してブロックされている全てのスレッドに通知する ( std::atomic_flag の public メンバ関数) |
| (C++20) |
atomic_flag_waitでブロックされているスレッドに通知する (function) |
| (C++20) |
atomic_flag_waitでブロックされている全てのスレッドに通知する (function) |