std::atomic_flag:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++20)
|
||||
|
atomic_flag::wait
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
|
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
=
|
(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)
|
通知所有被阻塞正在等待原子对象的线程
(公开成员函数) |
|
(C++20)
|
通知在 atomic_flag_wait 中被阻塞的线程
(函数) |
|
(C++20)
|
通知所有在 atomic_flag_wait 中被阻塞的线程
(函数) |