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> 의 public member function)
(C++20)
원자적 객체를 대기 중인 스레드 중 최소 하나에 알림을 전송합니다
( std::atomic<T> 의 public member function)
(C++20)
원자적 객체를 대기 중인 모든 스레드에 알림을 전송합니다
( std::atomic<T> 의 public member function)
atomic_wait에서 차단된 스레드 하나에 알림을 전송합니다
(function template)
atomic_wait에서 차단된 모든 스레드에 알림을 전송합니다
(function template)