condition-variablewait-notifyproducer-consumer
Condition variable은 언제 사용하나요?
- 예상 시간
- 8분
30초 답변
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
condition variable을 mutex와 함께 쓰는 이유는 무엇인가요?
왜 if가 아니라 while로 조건을 확인하나요?
notify와 broadcast의 차이는 무엇인가요?
lost wakeup은 무엇인가요?
producer-consumer에서 condition variable은 어떻게 쓰이나요?
부가 설명
단순히 lock만 있으면 ‘지금 queue가 비었으니 나중에 다시 확인하자’를 효율적으로 표현하기 어렵습니다. 계속 반복 확인하면 CPU를 낭비하고, sleep을 대충 넣으면 반응이 늦습니다. Condition variable은 상태가 바뀌는 순간을 기다리는 쪽에 알려주는 구조입니다.
중요한 점은 condition variable 자체가 조건을 저장하지 않는다는 것입니다. 실제 조건은 공유 변수나 queue 상태에 있고, condition variable은 기다리고 깨우는 통로입니다. 그래서 mutex로 상태를 보호하면서 while 루프에서 조건을 다시 확인해야 합니다. 이 패턴을 말할 수 있으면 단순 암기보다 이해가 드러납니다.
한 줄 정리
Condition variable은 공유 상태가 원하는 조건이 될 때까지 스레드를 잠재웠다가 알림으로 깨우는 도구입니다.