[ CS / OS ] Mutex & Semaphore

황승환·2022년 7월 12일
0

Python

목록 보기
365/498

Mutex

  • 공유자원에 여러 개의 스레드가 접근하는 것을 막는 것
  • 임계영역을 가진 스레드의 실행 시간을 서로 겹치지 않도록 하여 각각 단독으로 실행하도록 하는 기법
  • 다중 프로세서들의 공유 리소스에 대한 접근을 조율하기 위해 synchronized 혹은 lock을 사용하기 때문에, Mutex 객체에 2개 이상의 스레드가 동시에 사용할 수 없음

Semaphore

  • 공유자원에 여러 개의 프로세스가 접근하는 것을 막는 것
  • 리소스의 상태를 나타내는 간단한 카운터라고 생각할 수 있음
    • OS나 커널의 지정된 저장장치 내의 값임
    • 일반적으로 긴 시간을 확보하는 리소스에 대해 이용
    • 유닉스 시스템 프로그래밍에서 semaphore은 운영체제의 리소스를 경쟁적으로 사용하는 다중 프로세스의 제어나 동기화를 담당하는 기술
  • 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 프로세스가 접근 가능
  • 각 프로세스는 semaphore 값을 확인하고 변경할 수 있음
    • 자원을 사용하는 프로세스는 semaphore값을 변경하여 다른 프로세스가 기다리도록 함
    • 자원에 접근할 때, 다른 프로세스가 사용중이라는 사실을 알게 되면 재시도 하기 전에 일정 시간을 기다림
    • 이진수를 사용하거나 추가적인 값을 사용

Mutex vs Semaphore

동기화 대상의 개수

  • Mutex는 1개의 대상에 대해서만 동기화를 수행하지만, Semaphore는 하나 이상의 대상에 대해 수행할 수 있음

Mutex is Semaphore, but Semaphore isn't Mutex

  • Mutex는 0과 1을 사용하는 binary semaphore라고 할 수 있음.
  • Semaphore는 하나 이상의 대상에 대한 동기화가 가능하기 때문에 Mutex라고 할 수 없음.

소유권

  • Semaphore는 소유권을 가질 수 없음.
  • Mutex는 소유권을 가질 수 있고, 소유주는 이에 대한 책임을 가짐 (Lock을 소유할 수 있음).

해제 권한

  • Mutex는 Mutex를 소유하고 있는 스레드만이 해제 가능
  • Semaphore는 Semaphore를 소유하지 않아도 해제 가능

범위

  • Semaphore은 시스템 범위에 걸쳐있기 때문에 파일 시스템 상에 파일 형태로 존재
  • Mutex는 프로세스 범위를 가지기 때문에 프로세스가 종료되면 자동으로 Clean up 됨

정리

  • Mutex는 스레드의 동시 접근 제한, Semaphore는 프로세스의 동시 접근 제한
  • Mutex는 binary semaphore라고 볼 수 있지만, Semaphore는 Mutex가 아님
  • Mutex는 동기화 대상이 하나, Semaphore는 동기화 대상이 하나 이상
  • Mutex는 소유권을 가져야만 해제 가능, Semaphore는 소유권을 가지지 않아도 해제 가능
  • Mutex는 프로세스 범위를 가지기 때문에 프로세스 종료 시 Clean up, Semaphore는 시스템 범위를 가지기 때문에 파일 시스템 상에 파일 형태로 존재
profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글