조건 변수는 알림 그 자체보다 공유 상태, 뮤텍스, 프레디케이트가 함께 맞물릴 때 안전합니다.
공유 상태를 읽기 전에 unique_lock으로 보호합니다.
큐가 비었는지, 종료 플래그가 켜졌는지처럼 실제 상태를 검사합니다.
wait는 잠자는 동안 뮤텍스를 풀어 생산자가 진입할 수
있게 합니다.
데이터를 넣거나 플래그를 바꾼 뒤 notify_one 또는
notify_all을 호출합니다.
깨어났다는 사실만 믿지 말고 프레디케이트가 참일 때만 진행합니다.