Semapore, Mutex, Spin-Lock 차이점

Spin-lock, Semapore, Mutex는 모두 Thread/Process의 병행성을 보장하기 위한 상호배제 기법(Mutual Exclusion Techniques)이다.

이 셋의 차이점을 한번 알아보자

  1. Mutex
    • 하나의 자원을 통제하는데 사용 된다.
    • 외부 변수를 두어 그 변수의 값을 조정하여(0 or 1) 자원의 접근을 제어한다.
    • 그래서 이진 세마포어(binary semaphore)라고도 불린다.
    • 만약, 임계 구역(Critical Section)이 잠겨있어서 진입을 하지 못하게 되면 풀릴때까지 기다린다. 이 때 문맥 교환(Context Change)이 일어난다.
      • 즉, 해당 Process는 CPU의 자원을 점유하지 않는다.
      • 이 특성이 Spin-Lock과 다른 점이다.
  2. Semapore
    • 자원의 수가 여러개일 경우 사용하는 기법이다.
    • 외부 변수는 1 이상의 값을 가질 수 있다.
    • 기본 특성은 Mutex와 같다.
  3. Spin-Lock
    • 임계 구역(Critical Section)에 대해 자원의 점유가 가능할때까지 while을 돌며 계속 기다린다. 즉, 바쁜 대기(Busy Waiting) 상태이다.
    • 문맥 교환(Context Change)이 일어나지 않는다. 그래서 자원의 점유/해제가 짧은 시간안에 해결이 될 때 사용한다. 즉, 문맥 교환(Context Change)에 소요되는 시간이 없다.
    • 하지만, CPU의 자원을 계속 사용하기 때문에 점유/해제의 시간이 길어지면 CPU 사용율이 100%까지 올라갈 수도 있다.
    • Multi Core Processor에서 사용 가능하다. 만약 Single Core Processor에서 사용하면 문맥 교환(Context Change)이 일어나게 되어 Mutex와 같은 동작을 한다.
    • Spin-Lock의 여러 종류를 정리한 글: spinlock 종류, 차이점

 

참고로, 상호배제 기법은 이 이외에 모니터(Monitor), 메세지 전달(Message Passing) 등이 있다.