ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 뮤텍스(Mutex) vs 세마포어(Semaphore)
    OS 2021. 11. 19. 18:36

    뮤텍스(Mutex)와 세마포어(Semaphore)


    안녕하세요? 장장스입니다.

    오늘은 기술면접에서 물어본다고 하는(?) 뮤텍스와 세마포어에 대해 정리하겠습니다.

     

     

    언제 등장해?


    교착상태(deadlock)에 대해 들어보셨다면 이 글을 읽을 준비가 되신겁니다. 교착상태는 제한된 자원을 두고 프로세스나 스레드가 작업을 하지 않고 무한 대기에 빠지게 되는 것을 말합니다.

     

    교착상태가 발생하기 위해서 다음과 같은 4가지 조건이 필요합니다.

    • 상호 배제
    • 점유 대기
    • 비선점
    • 순환 대기

    이 중 상호 배제 조건을 해결하기 위한 방법이 뮤텍스(Mutex)와 세마포어(Semaphore)입니다.

     

     

    뮤텍스(Mutex)


    뮤텍스는 mutualexclusion의 합성어로, 여러 스레드를 실행하는 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 매커니즘을 말합니다.

     

    1. Boolean 타입의 Lock 변수를 사용하여 자원에 대한 접근을 제한합니다.

    2. 임계영역(critical section)의 자원에 접근하면 해당 스레드는 Lock을 걸어버립니다. 이 때, 다른 스레드가 공유자원에 접근하면 Blocking 후 대기 큐로 보냅니다.

    3. 공유자원 사용을 마친 스레드는 Lock을 해제합니다. Lock 해제는 Lock을 건 스레드만 해제할 수 있습니다.

     

    스핀락(SpinLock)


    뮤텍스와 유사한 스핀락이라는 방법도 있습니다. 

     

    1. 뮤텍스와 달리 대기 큐를 갖지 않으며 Busy-waiting 합니다.

    2. Mutex-nonblocking 모델로 볼 수 있습니다.

     

     

    세마포어(Semaphore)


    세마포어는 변수를 통해 접근 가능한 스레드를 제한합니다. 뮤택스는 1개의 스레드만 자원을 사용할 수 있었으나 세마포어변수 만큼 공유 자원에 접근 할 수 있습니다.

     

    1. 세마포어 변수를 통해 wait, signal을 관리합니다 세마포어 변수는 0이상의 정수 값을 갖습니다.

    2. 세마포어 변수가 1개인 경우 뮤텍스 처럼 사용이 가능합니다.

    3. 뮤텍스와 달리 Lock을 걸지 않은 스레드도 signal을 보내 Lock을 해제 할 수 있습니다.

     

     

     

     

    Post


    References


     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    'OS' 카테고리의 다른 글

    [OS] 주소 바인딩  (0) 2021.11.24
    [OS] CPU 스케줄링  (0) 2021.11.22
    [OS] 데드락 (Deadlock) - 교착상태  (0) 2021.08.16
    [OS] Race Condition 경쟁상태란?  (0) 2021.08.15
    [OS] 프로그램 VS 프로세스 VS 스레드  (0) 2021.07.21

    댓글