std::atomic_flag_wait, std::atomic_flag_wait_explicit
來自 cppreference.com
定義於標頭檔案 <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() 通知(或執行緒虛假地解除阻塞)。此過程重複進行,直到值不相等。
1,2) 記憶體同步順序為 std::memory_order_seq_cst。
3,4) 記憶體同步順序為 order。
即使底層實現虛假喚醒,這些函式也保證只有在值發生變化時才返回。
目錄 |
[edit] 引數
物件 | - | 指向要檢查和等待的原子標誌的指標 |
old | - | 原子標誌不再包含的值 |
順序 | - | 記憶體同步順序 |
[edit] 返回值
(無)
[edit] 注意
這種形式的變更檢測通常比簡單的輪詢或純自旋鎖更高效。
由於 ABA 問題,從 old 到另一個值再回到 old 的瞬時變化可能會被錯過,而不會解除阻塞。
[edit] 示例
本節不完整 原因:無示例 |
[edit] 參見
(C++20) |
通知至少一個等待原子物件的執行緒 ( std::atomic_flag 的公共成員函式) |
(C++20) |
通知所有被原子物件阻塞的執行緒 ( std::atomic_flag 的公共成員函式) |
(C++20) |
通知一個在 atomic_flag_wait 中阻塞的執行緒 (函式) |
(C++20) |
通知所有在 atomic_flag_wait 中阻塞的執行緒 (函式) |