std:: atomic_flag_wait, std:: atomic_flag_wait_explicit
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<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() 唤醒(或线程出现伪唤醒)。此过程将重复执行,直至比较结果不相等。
这些函数保证仅在值发生变化时返回,即使底层实现出现伪唤醒。
目录 |
参数
| object | - | 指向要检查并等待的原子标志的指针 |
| old | - | 用于检查原子标志不再包含的值 |
| order | - | 内存同步排序方式 |
返回值
(无)
注释
这种变更检测形式通常比简单轮询或纯自旋锁更高效。
由于 ABA问题 ,从 old 到其他值再回到 old 的瞬时变化可能被遗漏,导致无法解除阻塞。
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
(C++20)
|
通知至少一个等待原子对象的线程
(
std::atomic_flag
的公开成员函数)
|
|
(C++20)
|
通知所有阻塞等待原子对象的线程
(
std::atomic_flag
的公开成员函数)
|
|
(C++20)
|
通知在 atomic_flag_wait 中阻塞的线程
(函数) |
|
(C++20)
|
通知所有在 atomic_flag_wait 中阻塞的线程
(函数) |