Namespaces
Variants

std::atomic_flag:: wait

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
void wait ( bool old, std:: memory_order order =
std:: memory_order_seq_cst ) const noexcept ;
(1) (自 C++20 起)
(自 C++26 起为 constexpr)
void wait ( bool old,

std:: memory_order order =

std:: memory_order_seq_cst ) const volatile noexcept ;
(2) (自 C++20 起)

执行原子等待操作。行为表现为重复执行以下步骤:

  • this - > test ( order ) old 的值进行比较。
    • 若两者相等,则阻塞当前线程,直到 * this notify_one() notify_all() 唤醒,或线程出现伪唤醒。
    • 否则立即返回。

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

如果 order 不是 std:: memory_order_relaxed std:: memory_order_consume std:: memory_order_acquire std:: memory_order_seq_cst ,则行为未定义。

目录

参数

old - 用于检查 atomic_flag 对象不再包含的值
order - 要强制执行的内存顺序约束

注释

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

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


示例

参见

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