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 std:: memory_order_release std:: memory_order_acq_rel 其中之一,则行为未定义。

这些函数保证仅在值发生变化时返回,即使底层实现出现伪唤醒。

目录

参数

object - 指向要检查并等待的原子标志的指针
old - 用于检查原子标志不再包含的值
order - 内存同步排序方式

返回值

(无)

注释

这种变更检测形式通常比简单轮询或纯自旋锁更高效。

由于 ABA问题 ,从 old 到其他值再回到 old 的瞬时变化可能被遗漏,导致无法解除阻塞。

示例

参见

(C++20)
通知至少一个等待原子对象的线程
( std::atomic_flag 的公开成员函数)
(C++20)
通知所有阻塞等待原子对象的线程
( std::atomic_flag 的公开成员函数)
通知在 atomic_flag_wait 中阻塞的线程
(函数)
通知所有在 atomic_flag_wait 中阻塞的线程
(函数)