Mutex · 누가 만지나
predicate를 읽고 공유 상태를 바꾸는 모든 경로를 같은 lock 규칙으로 직렬화한다.
공유 상태·그 상태를 보호하는 mutex·상태 변화를 기다리는 condition을 같은 경계로 묶어야 lost wakeup과 잘못된 진행을 막을 수 있다.
predicate를 읽고 공유 상태를 바꾸는 모든 경로를 같은 lock 규칙으로 직렬화한다.
count > 0처럼 공유 변수로 표현한 조건만이 실행 가능 여부를 결정한다.
상태가 바뀌었을 가능성을 waiter에게 알린다. 깨어남 자체는 predicate 참을 보장하지 않는다.
if 한 번깨어난 사이 다른 thread가 상태를 소비할 수 있다.
mutex 불일치predicate 검사·변경·wait가 다른 보호 경계를 쓰면 race가 남는다.
상태 없는 signalpredicate를 바꾸지 않은 알림은 진행 조건을 만들지 못한다.
signal / broadcast한 waiter면 signal, 여러 종류의 조건이 다시 판단해야 하면 broadcast 비용을 검토한다.