본문 바로가기
Knowledge/CS

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

by YoonJong 2022. 12. 2.
728x90

먼저 임계영역은 무엇인가?

임계영역(Critical Section) 이란?

동시접근, 공유되는 자원에서 문제가 발생하지 않도록 독점을 보장해줘야하는 영역을 뜻한다.

 

 

뮤텍스와 세마포어는 동시성 프로그램의 공유자원 관리 중 한가지 방법인 상호배제를 달성하는 기법이다.

상호배제는 임계구역은 어느 시점에든지 한 개의 프로세스만 사용할 수 있도록 하는 것이다. ( Lock )

 


뮤텍스(Mutex)

 

사람 : 스레드, 프로세스

화장실 : 자원

 

예를 들어 화장실을 갈 때 Key를 가지고 가는 것과 같다.

어느 사람(1명) 이 화장실을 갈 때 Key를 가지고가면 화장실에는 사람이 있는 것이며,

화장실을 가고 싶은 사람은 대기를 해야한다. 

또한, 화장실을 가고 싶은 사람이 추가된다면 순서대로 줄을 서야한다.

화장실에서 사람이 나오면 순차적으로 Key를 받아 사용이 가능하다.

 

 - 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 동기화 or 락을 사용

 - 뮤텍스 객체를 두 스레드가 동시에 사용 불가능

 

뮤텍스는 Key 에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 (쓰레드,프로세스) 만이 공유자원에 접근가능

 


세마포어(Semaphore)

뮤텍스의 예와 비슷하다.

조금 더 화장실을 사용하기 쉽다.

화장실이 3개라고 생각한다.

화장실을 사용하고 있을 때는 빈칸을 나타내는 전광판에서 차감해주고 화장실에서 나오면 다시 증가해준다.

0이 된다면 그 다음 사람은 1이 될때까지 기다려야하고 1이 되면 바로 사용한다.

 

 - 공유자원에 접근할 수 있는 프로세스의 최대 허용치만큼 사용자가 동시에 접근 가능

 - 자원을 사용하지 않는 상태가 되면, 대기하던 프로세스가 즉시 자원을 사용

 - 각 프로세스는 세마포어의 값을 확인하고 변경 가능

 

현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법

 

 


차이점

 가장 큰 차이점은 화장실(동기화 대상)의 개수이다.

 

 - 뮤텍스는 동기화 대상이 오직 1개이며, 세마포어는 1개 이상일 때 사용한다.

 - 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.

 ( 뮤텍스는 0 , 1로 이루어져 있는 바이너리 세마포어 )

 - 뮤텍스는 자원을 소유할 수 있지만, 세마포어는 소유가 불가능하다.

 - 뮤텍스는 Lock을 획득한 프로세스가 반드시 그 Lock을 해제해야한다.

   세마포어는 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다.

 - 뮤텍스는 자원 소유와 책임을 가질 수 있지만, 세마포어는 자원 소유가 불가능하다.

 ( 뮤텍스는 Lock 을 가지고 있다 , 상태가 2개뿐 )

 

 

참고 

https://worthpreading.tistory.com/90

 

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

이 글은 Medium에 개시된 글입니다. Medium에서 보시면 좀 더 유쾌한 환경에서 글을 보실 수 있습니다. 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이 Toilet problem 동시성 프로그래밍의 가장 큰 숙제는 ‘공

worthpreading.tistory.com

https://heeonii.tistory.com/14

 

[운영체제] Mutex 뮤텍스와 Semaphore 세마포어의 차이

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section(여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유

heeonii.tistory.com

https://chelseashin.tistory.com/40

 

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

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

chelseashin.tistory.com

https://jwprogramming.tistory.com/13

 

Semaphore란? 세마포어와 뮤텍스의 차이는?

Deadlock에 이어, Semaphore와 mutex에 대해 설명하고자 합니다. - 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있습니다. 즉, 공유된 자

jwprogramming.tistory.com

 

728x90

댓글