atomic_atomic_wait
atomic_atomic_wait (원자적 대기)
std::atomic_wait는 원자적 객체의 값이 기대값과 다를 때까지 스레드를 블록하며 기다려요.
출처: cppreference
본문
std::atomic_wait와 std::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이 아닐 때까지 대기
}