lock mutex
공유 조건을 확인하기 전 잠금을 잡습니다.
조건 변수는 signal을 믿고 바로 진행하지 않고, 깨어난 뒤에도 while 조건을 다시 검사해야 안전합니다.
공유 조건을 확인하기 전 잠금을 잡습니다.
조건이 만족될 때까지 반복 검사합니다.
대기하면서 mutex를 놓고 깨어나면 다시 잡습니다.
상태 변경자가 대기 스레드를 깨웁니다.
허위 각성이나 경쟁 때문에 조건을 다시 확인합니다.
조건 변수의 정석은 if가 아니라 while입니다. 깨어났다는 사실과 조건이 참이라는 사실은 같은 말이 아닙니다.