Info
해당 섹션은 critical-section 문제를 해결하기 위한 가장 심플한 방법중 하나인 Mutex lock에 대해서 다룬다.
동작 방식
프로세스는 critical-section에 진입하기 전에 lock을 획득해야 하며, 섹션을 벗어날 때 lock을 해제한다.
Mutex lock 구현
- Mutex lock 구조:
- 불리언 변수 available을 사용하여 lock의 가용성을 표시한다.
- 불리언 변수 available을 사용하여 lock의 가용성을 표시한다.
- acquire() 함수:
- lock을 획득하는 함수. available이 true가 될 때까지 대기한다.
- lock을 획득하는 함수. available이 true가 될 때까지 대기한다.
- release() 함수:
- lock을 해제하는 함수. available을 true로 설정한다.
- lock을 해제하는 함수. available을 true로 설정한다.
- 원자성 요구:
- acquire()와 release() 호출은 원자적으로 수행되어야 한다.

- acquire()와 release() 호출은 원자적으로 수행되어야 한다.
주요 단점과 해결 방안
- 단점: 바쁜 대기(busy waiting) 상태에서 CPU 사이클을 낭비
- 해결 방안: 대기 중인 프로세스를 일시적으로 잠재우고(sleep), lock이 가용해지면 깨우는 전략을 고려한다.
sleep으로 wait queue로 보내는 것을 말하는 듯
mutex lock 종류(spin lock)
- spin lock : 프로세스가 lock을 획득할 수 있게 될 때까지 “회전(spin)“하는 mutex lock.
- spin lock의 장점: 프로세스가 lock에 대해 대기할 때 컨텍스트 전환(context switch)이 필요 없다.
- 적용 상황: 멀티코어 시스템에서 짧은 시간 동안 lock을 보유할 경우 spin lock이 선호된다.
spin lock은 busy waiting의 한 종류이다.