Namespaces
Variants

std:: atomic_flag_wait, std:: atomic_flag_wait_explicit

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
atomic_flag_wait atomic_flag_wait_explicit
(C++20) (C++20)
ヘッダーで定義 <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() によって通知される(またはスレッドが偽起床する)までブロックします。値が等しくなくなるまでこの処理が繰り返されます。

1,2) メモリ同期順序は std:: memory_order_seq_cst です。
3,4) メモリ同期順序は order です。
orderが order のいずれかである場合、 std:: memory_order_release および std:: memory_order_acq_rel の動作は未定義です。

これらの関数は、基盤となる実装が偽の解除を起こした場合でも、値が実際に変更された場合にのみ返ることが保証されています。

目次

パラメータ

object - チェックおよび待機対象のアトミックフラグへのポインタ
old - アトミックフラグが保持しなくなった値をチェックする値
order - メモリ同期順序

戻り値

(なし)

注記

この形式の変更検出は、単純なポーリングや純粋なスピンロックよりも効率的な場合が多いです。

ABA問題 のため、 old から別の値へ、そして old へ戻る一時的な変更が見逃され、ブロック解除が行われない可能性があります。

関連項目

(C++20)
アトミックオブジェクトを待機している少なくとも1つのスレッドに通知する
( std::atomic_flag の 公開メンバ関数)
(C++20)
アトミックオブジェクトを待機しているすべてのスレッドに通知する
( std::atomic_flag の 公開メンバ関数)
atomic_flag_waitでブロックされているスレッドに通知する
(関数)
atomic_flag_waitでブロックされているすべてのスレッドに通知する
(関数)