# std::atomic_flag_wait, std::atomic_flag_wait_explicit

From cppreference.com
< cpp‎ | atomic

Defined in header `<atomic>` |  |
| (1) | (since C++20)
void atomic_flag_wait( const atomic_flag* object, bool old ) noexcept; |  |
void atomic_flag_wait( const volatile atomic_flag* object, bool old ) noexcept; |  |
| (2) | (since C++20)
void atomic_flag_wait_explicit( const atomic_flag* object, bool old, std::memory_order order ) noexcept; |  |
void atomic_flag_wait_explicit( const volatile atomic_flag* object, bool old, std::memory_order order ) noexcept; |  |

Performs atomic waiting operations.

Compares object->test(std::memory_order_seq_cst) or object->test(order) with `old`, and if they are equal then blocks until *object is notified by std::atomic_flag::notify_one() or std::atomic_flag::notify_all() (or the thread is unblocked spuriously). This is repeated until the values compare unequal.

1) Equivalent to object->wait(old, std::memory_order_seq_cst).
2) Equivalent to object->wait(old, order).

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

### Parameters

object | - | pointer to the atomic flag to check and wait on
old | - | the value to check the atomic flag no longer contains
order | - | the memory synchronization ordering for this operation: must not be std::memory_order::release or std::memory_order::acq_rel

### 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

| This section is incomplete Reason: no example

### See also

notify_one (C++20) | notifies at least one thread waiting on the atomic object (public member function of `std::atomic_flag`)
notify_all (C++20) | notifies all threads blocked waiting on the atomic object (public member function of `std::atomic_flag`)
atomic_flag_notify_one (C++20) | notifies a thread blocked in atomic_flag_wait (function)
atomic_flag_notify_all (C++20) | notifies all threads blocked in atomic_flag_wait (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/atomic/atomic_flag_wait&oldid=138649"