CS/OS

Semaphore Vs Mutex

HJ39 2024. 1. 9. 17:11

Mutex

Mutual Exclusion의 합성어로 공유된 자원의 데이터나 임계영역(critical Section) 같은 곳에 스레드들의 서로 겹치지 않거나 하나의 프로세스나 스레드가 접근하는 것을 막는다.

  • 동기화 대상이 1개
  • 다른 스레드들은 뮤텍스의 lock을 가지기 위해 대기하고 락을 해제하는 스레드가 있을 때까지 접근하지 못한다.
  • Key 기반으로 한 상호배제 기법이다.
  • 다중 프로세스들의 공유 리소스에 접근을 조율하기 위해 동기화(Sync) 또는 락(Lock)을 사용

그림을 보면 쉽게 이해할 수 있다.

카운터에 있는 화장실 키를 누군가가 가지고 화장실을 이용 중인 경우

다른 사람은 해당 화장실을 이용할 수 없다.

하지만 이용을 마친 누군가가 Key를 카운터에 다시 가져다 놓으면 다른 사람들이 화장실을 이용할 수 있다.

이러한 방법이 Mutex이다.

 

 

Semaphore

  • 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.
  • 공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 접근할 수 있다.
  • 다른 프로세스들이 모두 사용 중인 경우 기다려야 한다.

 

화장실이 칸이 여러 개인 경우

비어있으면 즉시 이용가능하지만

만약 칸이 모두 차있는 경우 다음 사람은 이용하지 못하고 기다려야 한다.

이런 방법이 세마포어이다.

 

 

차이점

  Mutex Semaphore
동기화 개수 1개 1개 이상
자원 소유 자원 소유가 가능
+
책임
자원 소유 불가
해제 소유하고 있는 스레드만이 해제가능하다. 소유하지 않는 스레드도 해제할 수 있다.
범위 프로세스의 범위를 가지고
종료될때 자동으로 사라진다.
시스템 범위에 걸쳐있고
파일 시스템 상 파일로 존재한다.
  • 데이터 무결성을 보장할 수 없고, 모든 교착상태를 해결하지 못한다.

 

 

 

 

# 참고한 사이트

 

[OS] 뮤텍스(Mutex)와 세마포어(Semaphore)란?

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section 문제가 발생할 수 있다. 이를 해결하기 위해 데이터를 한 번에 하나의

chelseashin.tistory.com