Semaphore Pattern

세마포어 자원 신호

카운터로 동시 접근 수를 제한하고, mutex와 조합해 공유 자료구조의 실제 변경 구간을 보호한다.

Counting

자원 풀 제한

DB 연결, 워커 슬롯, 요청 토큰처럼 N개까지만 허용할 때 사용한다.

Binary

스레드 간 신호

소유권보다 완료 알림이 중요할 때 wait와 signal을 분리해 쓴다.

Buffer

생산자-소비자

empty, full, mutex 세 값을 함께 써야 빈 슬롯과 차 있는 슬롯을 구분한다.

순서 규칙

empty 또는 full을 먼저 잡고, 그 다음 mutex로 버퍼 접근만 짧게 보호한다.

데드락 위험

mutex를 먼저 잡고 세마포어에서 기다리면 상대 스레드가 깨울 기회를 잃을 수 있다.