std::atomic_ref<T>:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
void
wait
(
value_type old,
std::
memory_order
order
=
std:: memory_order_seq_cst ) const noexcept ; |
(自 C++26 起为 constexpr) | |
执行原子等待操作。行为表现为重复执行以下步骤:
-
将
this
-
>
load
(
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_ref
对象不再包含的数值
|
| order | - | 需强制执行的内存顺序约束 |
注释
这种变更检测形式通常比简单轮询或纯自旋锁更高效。
由于 ABA问题 ,从 old 到其他值再回到 old 的瞬时变化可能被遗漏,导致无法解除阻塞。
比较操作按位进行(类似于 std::memcmp );不使用任何比较运算符。永远不会参与对象值表示的填充位将被忽略。
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
通知至少一个在原子对象上等待的线程
(公开成员函数) |
|
|
通知所有在原子对象上阻塞等待的线程
(公开成员函数) |
|
|
(C++20)
|
通知在 atomic_wait 中阻塞的线程
(函数模板) |
|
(C++20)
|
通知所有在 atomic_wait 中阻塞的线程
(函数模板) |