atomic_notify_all

atomic_notify_all (대기 중인 모든 스레드 깨우기)

주어진 atomic 객체에서 원자 대기 중인 모든 스레드를 깨우는 자유 함수예요. C++20부터 있어요.

출처: cppreference

본문

atomic_notify_all은 원자 통지 연산을 수행해요.

template< class T >
void atomic_notify_all( std::atomic<T>* object );   // (1)

*object에서 대기 중인 스레드(즉 std::atomic_wait(), atomic_wait_explicit(), 또는 std::atomic::wait())가 있으면 전부 깨워요. 없으면 아무 일도 하지 않아요. object->notify_all()과 동등해요.

  • 매개변수 object: 통지할 atomic 객체 포인터.
  • 반환 값: 없음.

이런 변화 감지 방식은 단순 폴링이나 순수 스핀락보다 효율적이에요. 대기자가 CPU를 태우며 회전하지 않고 블록했다가 통지로 깨어나니까요.

std::atomic<bool> ready{false};
// 생산자: ready = true; 완료 후
std::atomic_notify_all(&ready);
// 소비자: ready가 true가 되길 기다리다가 깨어남

wait/notify_one/notify_all을 짝으로 사용해 스핀 없는 동기화 패턴을 만들 수 있어요.

더 알아보기 (Learn more)

cppreference