CS

[자료구조] Mutex와 Spinlock의 차이점

juhwan 2023. 10. 2. 00:20

개념

뮤텍스(Mutex)

  • Mutual Exclusion의 줄임말로, 동시서 제어를 위한 프로그래밍 개념 중 하나다.
  • 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 보장하는 도구이다.
  • 두 개 이상의 스레드가 동일한 작업을 하지 못하도록 뮤텍스를 사용하여 해당 자원에 접근을 직렬화한다.

예시로 열쇠로 잠겨있는 1인 화장실을 생각하면 된다.

  1. 화장실을 가려면 열쇠가 필수로 필요하다.
  2. 열쇠가 없다면 누군가 화장실을 사용 중이다.
  3. 열쇠가 생길 때까지 기다린다.
  4. 열쇠가 있다면 화장실엔 아무도 없는 거다
  5. 화장실을 이용한 본인만 열쇠를 제자리에 갖다 놓을 수 있다.

뮤텍스 작동 순서

  1. Look: 스레드가 공유 자원에 접근하기 전에 뮤텍스로 잠근다.(이미 잠겼다면 하제까지 기다린다.)
  2. Access: 뮤텍스가 잠겨있다면 해당 스레드만이 공유 자원에 접근할 수 있다.
  3. Unlock: 작어비 완료되면 스레드는 뮤텍스를 해제한다. 그 후 다른 스레드 접근이 가능하다

Spinlock

  • 락이 해제될 때까지 계속해서 재시도를 하는 방식이다.
  • 뮤텍스 같은 경우, 락을 얻지 못한 스레드는 대기 상태로 전환되는데 spinlock은 이런 대기 과정이 없다.
  • 만약 락이 오랫동안 해제되지 않으면, 스레드는 CPU 시간을 낭비하여 계속해서 spinning 상태를 유지한다.
  • 따라서 Spinlock은 보통 락 보유시간이 짧아질 것으로 예상되거나 대기 시간보다 context switch비용이 클 경우 사용한다.