std:: atomic_flag_wait, std:: atomic_flag_wait_explicit
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ヘッダーで定義
<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 と比較し、等しい場合、 * object が std::atomic_flag::notify_one() または std::atomic_flag::notify_all() によって通知される(またはスレッドが偽起床する)までブロックします。値が等しくなくなるまでこの処理が繰り返されます。
これらの関数は、基盤となる実装が偽の解除を起こした場合でも、値が実際に変更された場合にのみ返ることが保証されています。
目次 |
パラメータ
| object | - | チェックおよび待機対象のアトミックフラグへのポインタ |
| old | - | アトミックフラグが保持しなくなった値をチェックする値 |
| order | - | メモリ同期順序 |
戻り値
(なし)
注記
この形式の変更検出は、単純なポーリングや純粋なスピンロックよりも効率的な場合が多いです。
ABA問題 のため、 old から別の値へ、そして old へ戻る一時的な変更が見逃され、ブロック解除が行われない可能性があります。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
(C++20)
|
アトミックオブジェクトを待機している少なくとも1つのスレッドに通知する
(
std::atomic_flag
の
公開メンバ関数)
|
|
(C++20)
|
アトミックオブジェクトを待機しているすべてのスレッドに通知する
(
std::atomic_flag
の
公開メンバ関数)
|
|
(C++20)
|
atomic_flag_waitでブロックされているスレッドに通知する
(関数) |
|
(C++20)
|
atomic_flag_waitでブロックされているすべてのスレッドに通知する
(関数) |