atomic_atomic_wait

atomic_atomic_wait (원자적 대기)

std::atomic_wait는 원자적 객체의 값이 기대값과 다를 때까지 스레드를 블록하며 기다려요.

출처: cppreference

본문

std::atomic_waitstd::atomic_wait_explicit<atomic> 헤더에 정의된 자유 함수예요. C++20부터 사용 가능해요.

template< class T >
void atomic_wait( const std::atomic<T>* obj,
                  typename std::atomic<T>::value_type old ) noexcept;

template< class T >
void atomic_wait_explicit( const std::atomic<T>* obj,
                           typename std::atomic<T>::value_type old,
                           std::memory_order order ) noexcept;

obj->load() 값이 old와 같은 동안 스레드를 블록해요. (스퍼리어스 웨이크업이 허용되므로 깨어난 후 다시 값을 확인해야 해요.) 다른 스레드가 atomic_notify_one이나 atomic_notify_all로 알려주면 깨어나요.

예제 (Example)

#include <atomic>
#include <thread>

std::atomic<int> data{0};
int main()
{
    std::thread([&]{ std::atomic_store(&data, 42);
                     std::atomic_notify_one(&data); }).detach();
    std::atomic_wait(&data, 0); // data가 0이 아닐 때까지 대기
}

더 알아보기 (Learn more)

cppreference