Namespaces
Variants

std:: atomic_wait, std:: atomic_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
atomic_wait atomic_wait_explicit
(C++20) (C++20)
Free functions for atomic flags
定义于头文件 <atomic>
template < class T >

void atomic_wait ( const std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(1) (C++20 起)
template < class T >

void atomic_wait ( const volatile std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(2) (C++20 起)
template < class T >

void atomic_wait_explicit ( const std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(3) (C++20 起)
template < class T >

void atomic_wait_explicit ( const volatile std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(4) (C++20 起)

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

  • object - > load ( ) (针对重载 (1,2) )或 object - > load ( order ) (针对重载 (3,4) )的值表示与 old 进行比较。
    • 若二者按位相等,则阻塞直至 * object std::atomic::notify_one() std::atomic::notify_all() 通知,或线程被伪唤醒。
    • 否则立即返回。

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

1,2) 等价于 object - > wait ( old )
3,4) 等价于 object - > wait ( old, order )
如果 order std :: memory_order :: release std :: memory_order :: acq_rel 其中之一,则行为未定义。

目录

参数

object - 指向待检查等待的原子对象的指针
old - 用于检查原子对象是否不再包含该值
order - 内存同步排序方式

返回值

(无)

注释

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

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

比较是按位进行的(类似于 std::memcmp );不使用比较运算符。永远不会参与对象值表示的填充位将被忽略。

示例

参见

(C++20)
阻塞线程直至被通知且原子值发生变化
( std::atomic<T> 的公开成员函数)
(C++20)
通知至少一个在原子对象上等待的线程
( std::atomic<T> 的公开成员函数)
(C++20)
通知所有在原子对象上阻塞等待的线程
( std::atomic<T> 的公开成员函数)
通知在 atomic_wait 中阻塞的线程
(函数模板)
通知所有在 atomic_wait 中阻塞的线程
(函数模板)