- mutuel exclusion 의 줄임말인 Mutex인 Mutex Lock 은 상위 수준의 소프트웨어 도구들의 경쟁조건을 방지하기 위해 개발하는 데 쓰인다.
- acquire()
- lock 을 얻기위해 쓰이는 메서드로 lock의 사용가능 여부를 아는 available이라는 불린 변수를 flase로 바꾼다.
- release()
- lock을 반환하기위해 쓰이는 메서드로 available을 True로 바꾼다.
while(true){
/* acquire lock */
critical section
/* release lock */
remainder section
}
- 위처럼 임계구역에 들어가기 위해서 acquire를 요청해 lock을 얻어야하는데 만약 받지 못한다면 주기적으로 계속 요청하는 ‘바쁜 대기’를 해야한다. → 다른 말로 ‘spin lock’라고도 불리는 이유이다
- 이로 인해 cpu의 주기를 계속적으로 낭비하고 이는 곧 문제가 된다.
- 하지만 cpu위에서 계속적인 바쁜 대기를 하기에 context switching이 없어 context switching에 상당한 시간이 소요될 때 시간을 줄여준다는 장점이 있다.
- 잠깐 동안의 락을 유지해야하는 경우 아주 효과적이다.