Namespaces
Variants

std:: atomic_wait, std:: atomic_wait_explicit

From cppreference.net
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
(C++11) (deprecated in C++26)
Free functions for atomic operations
atomic_wait atomic_wait_explicit
(C++20) (C++20)
Free functions for atomic flags
Определено в заголовочном файле <atomic>
template < class T >

void atomic_wait ( const std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(1) (начиная с C++20)
template < class T >

void atomic_wait ( const volatile std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(2) (начиная с C++20)
template < class T >

void atomic_wait_explicit ( const std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(3) (начиная с C++20)
template < class T >

void atomic_wait_explicit ( const volatile std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(4) (начиная с C++20)

Выполняет атомарные операции ожидания. Ведут себя так, как будто многократно выполняются следующие шаги:

  • Сравните представление значения объекта object - > load ( ) (для перегрузок (1,2) ) или object - > load ( order ) (для перегрузок (3,4) ) с представлением old .
    • Если они побитово равны, то блокируется до тех пор, пока * object не будет уведомлен с помощью std::atomic::notify_one() или std::atomic::notify_all() , или пока поток не будет разблокирован ложно.
    • В противном случае возвращает управление.

Эти функции гарантированно возвращают управление только при изменении значения, даже если базовая реализация разблокируется ложно.

1,2) Эквивалентно object - > wait ( old ) .
3,4) Эквивалентно object - > wait ( old, order ) .
Если order является одним из std :: memory_order :: release и std :: memory_order :: acq_rel , поведение не определено.

Содержание

Параметры

object - указатель на атомарный объект для проверки и ожидания
old - значение, которое проверяется на отсутствие в атомарном объекте
order - порядок синхронизации памяти

Возвращаемое значение

(нет)

Примечания

Эта форма обнаружения изменений часто более эффективна, чем простое опрашивание или чистые спинлоки.

Из-за проблемы ABA , временные изменения с old на другое значение и обратно на old могут быть пропущены и не разблокировать.

Сравнение производится побитово (аналогично std::memcmp ); операторы сравнения не используются. Биты заполнения, которые никогда не участвуют в представлении значения объекта, игнорируются.

Пример

Смотрите также

(C++20)
блокирует поток до получения уведомления и изменения атомарного значения
(публичная функция-член std::atomic<T> )
(C++20)
уведомляет как минимум один поток, ожидающий атомарный объект
(публичная функция-член std::atomic<T> )
(C++20)
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(публичная функция-член std::atomic<T> )
уведомляет поток, заблокированный в atomic_wait
(шаблон функции)
уведомляет все потоки, заблокированные в atomic_wait
(шаблон функции)