조건 변수의 notify를 락 밖으로 옮깁니다. 깨움 경합과 조건 변수 객체 수명은 어떻게 보호하나요?
꼬리 질문을 독립 문항으로 확장했습니다. 원래 문항에서 맥락 보기 →
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
01
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
predicate 변경은 같은 mutex로 보호하고 알림은 그 상태 변경 이후 수행합니다. 락 밖 notify는 깨어난 스레드가 즉시 같은 락을 기다리는 경합을 줄일 수 있지만 항상 더 빠르다는 보장은 없습니다.
락을 푼 직후 마지막 소유자가 조건 변수를 파괴하면 notify가 죽은 객체를 접근할 수 있어 notifier 수명까지 보장해야 합니다. 대기자는 while로 predicate를 재확인합니다. 알림 위치·spurious wakeup·종료·객체 파괴를 함께 시험하고 신호 자체를 상태로 사용하지 않습니다.
02
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- predicate 변경은 같은 mutex로 보호하고 알림은 그 상태 변경 이후 수행합니다. 락 밖 notify는 깨어난 스레드가 즉시 같은 락을 기다리는 경합을 줄일 수 있지만 항상 더 빠르다는 보장은 없습니다.
- 알림 위치·spurious wakeup·종료·객체 파괴를 함께 시험하고 신호 자체를 상태로 사용하지 않습니다.
03
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 다음 핵심 구분을 반대로 설명하거나 성립 조건을 생략한다: predicate 변경은 같은 mutex로 보호하고 알림은 그 상태 변경 이후 수행합니다.
04
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.