名前空間
変種
操作

std::atomic_flag_wait, std::atomic_flag_wait_explicit

From cppreference.com
< cpp‎ | atomic
 
 
並行性サポートライブラリ
スレッド
(C++11)
(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++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
安全なメモリ解放 (Safe Reclamation)
(C++26)
ハザードポインタ
アトミック型
(C++11)
(C++20)
アトミック型の初期化
(C++11)(C++20で非推奨)
(C++11)(C++20で非推奨)
メモリオーダー
(C++11)(C++26で非推奨)
アトミック操作のためのフリー関数
アトミックフラグのためのフリー関数
atomic_flag_waitatomic_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 と比較し、それらが等しい場合は、std::atomic_flag::notify_one() または std::atomic_flag::notify_all() によって *object が通知されるまで(またはスレッドが誤って解除されるまで)ブロックします。これは、値が等しくなくなるまで繰り返されます。

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

These functions are guaranteed to return only if value has changed, even if underlying implementation unblocks spuriously.

目次

[編集] パラメーター

オブジェクト (object) - チェックおよび待機するアトミックフラグへのポインター
old - アトミックフラグがもはや含んでいない値をチェックします。
order - メモリ同期順序

[編集] 戻り値

(なし)

[編集] 注記

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

ABA問題のため、old から別の値への一時的な変更、そして再び old に戻る変更は、見落とされる可能性があり、解除されない場合があります。

[編集]

[編集] 関連項目

アトミックオブジェクトを待機しているスレッドを少なくとも1つ通知する
std::atomic_flag の public メンバ関数) [編集]
アトミックオブジェクトを待機してブロックされている全てのスレッドに通知する
std::atomic_flag の public メンバ関数) [編集]
atomic_flag_waitでブロックされているスレッドに通知する
(function) [編集]
atomic_flag_waitでブロックされている全てのスレッドに通知する
(function) [編集]
English 日本語 中文(简体) 中文(繁體)