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을 짝으로 사용해 스핀 없는 동기화 패턴을 만들 수 있어요.