std::atomic_flag:: wait

From cppreference.com

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
Free functions for atomic operations
Free functions for atomic flags
void wait ( bool old, std:: memory_order order =
std :: memory_order :: seq_cst ) const noexcept ;
(1) (since C++20)
void wait ( bool old, std:: memory_order order =
std :: memory_order :: seq_cst ) const volatile noexcept ;
(2) (since C++20)

Performs atomic waiting operations. Behaves as if it repeatedly performs the following steps:

  • Compare this - > test ( order ) with that of old .
    • If those are equal, then blocks until * this is notified by notify_one() or notify_all() , or the thread is unblocked spuriously.
    • Otherwise, returns.

These functions are guaranteed to return only if value has changed, even if underlying implementation unblocks spuriously.

If order is one of std :: memory_order :: release and std :: memory_order :: acq_rel , the behavior is undefined.

Parameters

old - the value to check the atomic_flag 's object no longer contains
order - memory order constraints to enforce

Return value

(none)

Notes

This form of change-detection is often more efficient than simple polling or pure spinlocks.

Due to the ABA problem , transient changes from old to another value and back to old might be missed, and not unblock.


Example

See also

(C++20)
notifies at least one thread waiting on the atomic object
(public member function)
(C++20)
notifies all threads blocked waiting on the atomic object
(public member function)
notifies a thread blocked in atomic_flag_wait
(function)
notifies all threads blocked in atomic_flag_wait
(function)