페이지 선택

뮤텍스 vs. 세마포어

뮤텍스와 세마포어는 여러 쓰레드들이 공유자원에 대한 접근을 시간적으로 조절(Synchronization)하는 방식에 대한 기법들이다.

어떤 방식으로 중재하는지에 대한 것이 둘간의 차이가 있을 것.

세마포어(Semaphore)와 뮤텍스(Mutex) – LOG.INFO

프로세스 동기화 :: 티끌모아 산을 쌓아보자 (tistory.com)

 

 

 

  • 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다. 반면에 뮤텍스는 오직 1개만의 프로세스(또는 쓰레드)만 접근할 수 있습니다.

 

  • 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다. 하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
  • Mutex의 경우 Mutex를 소유하고 있는 쓰레드가 이 Mutex를 해제할 수 있습니다. 하지만 Semaphore의 경우 이러한 Semaphore를 소유하지 않는 쓰레드가 Semaphore를 해제 할 수 있습니다.

 

 

설명1

★★★ 가장 큰 차이점은 관리하는 동기화 대상이 갯수입니다. Mutex는 동기화 대상이 오직 하나뿐일 때, Semaphore는 동기화 대상이 하나 이상일 때 사용합니다.

뮤텍스란 MUTual EXclusion. 말 그대로 “상호 배제”로 해석 된다.
가장 쉽게 생각하자면 중복 실행 금지 프로그램이라고 생각하면 될지도.
윈도우에 프로그램을 하나만 띄워야 하는 프로그램을 만들거나,
실행 되고 있는 프로그램을 다시 실행 했을 경우 “실행 중인 해당 프로그램을 보여주거나” “이미 실행 되었다는 메시지”를 뿌려 주는 식이라고 가정한다면 뮤텍스를 사용 하는것이 좋다.
윈도우 서비스용 프로그램이 대표적인 예라고 할 수 있다.(2번 이상 동시에 실행이 되진 않으니까..)

그러면 세마포어(semaphore: 수신호)는?
한 컴퓨터에 사용자가 노트장이라는 프로그램을 최대한 5개만 실행 되도록 개발 하고 싶다면 바로 세마포어를 써야 한다.
여기서 “최대한 5개만” 이라는 5의 수치는 임계세션(Critical Section)의 계수이고 이런 임계세션을 관리 하는 것을 계수 세마포어라고 하며 세마포어 중 하나인 것이다.

사용자가 notepad.exe를 실행 명령에 20번을 입력하고 동시에 실행 시키려 한다면, 5번만 실행 되고 15번은 무시 되게 하거나, 5번을 실행 하고 하나씩 종료 될 때를 기다렸다가 순차적으로 15개의 노트장을 실행 시켜 줄 수도 있다.

다시 정리 하자면 뮤텍스는 상호배제 알고리즘으로 synchronization로 만든 블록 사이의 로직이 실행이 다 끝날 때까지 락을 걸어 사용한다고 했을 때,

세마포어는 상호배제 알고리즘을 사용하나 거기에 임계영역에 대한 범위를 만들어서 자원을 보호한다고 생각하면 된다.
참고로 이진 세마포어에서 임계섹션이 0과 1을 갖는 쓰레드나 프로세스는 뮤텍스라고 생각해도 무방하다.

 

 

설명2

Semaphore 종류

  • counting semaphore : 임의의 자원 개수를 허용하는 세마포어 (n개의 자원의 허용)
  • binary semaphore : ‘잠김/해제’ 와 같이 0 또는 1만을 가질 수 있도록 자원 개수를 1개로 제한하는 세마포어

 

– counting semaphore

semaphore가 동기화 방법 중 하나이지만, 다수의 자원을 허용하는 counting semaphore의 경우 임계 구역(critical section)에서 발생하는 경쟁 상태(race condition)를 완전히 해소하지는 못한다. (mutex 는 해결 가능)

 

사용 예시

  • 로그인 인원 수 제한
  • 한정 버퍼 문제(bounded-buffer problem) – 생산자-소비자 문제(producer-consumer problem)라고도 함
    • 세마포어로 자원의 개수를 한정하고, 버퍼를 동기화 시켜 정상 동작할 수 있도록 한다.

 

– binary semaphore (mutex)

특별히 1개의 자원만 허용하는 binary semaphore를 mutex(또는 lock)라고도 한다.

binary semaphore와 mutex의 차이를 구분짓는 경우도 있는데, 이 경우 mutex는 잠금/해제를 하는 주체가 동일 해야 한다는 제한이 있다. 이런 제한 때문에 mutex가 안전한 동기화 방법이라고 한다.

 

 

Viewed Page List