std::mutex m;
std::condition_variable cv;
void consumer()
{
std::unique_lock<std::mutex> ul(m);
// notify가 올때까지 대기.
cv.wait(ul);
}
void producer()
{
// ... 로직 처리.
// wait중인 스레드를 깨어나게 한다.
cv.notify_one();
// wait중인 모든 스레드를 깨어나게 한다.
cv.notify_all();
}
// 두번째 인자인 predicate를 이용한다.
cv.wait(ul, [] { return data_ready; } );