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

2020-04-06

해당 Post는 Semaphore(세마포어)와 Mutex(뮤텍스)의 차이점를 정리한 파일이다.


공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다.

이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다.

이를 위하여 고안된 것이 바로 Semaphore 세마포어 입니다.

임계 구역(Critical Section)

여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

공유 데이터를 여러 프로세스가 동시에 접근할 때 잘못된 결과를 만들 수 있기 때문에,

한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 한다.

세마포어의 동작 원리

세마포어의 동작 원리를 알려면 세마포어 변수, semWait 연산, semSignal 연산에 대해 먼저 알아야 합니다.

세마포어는 정수 값을 가지는 변수로 볼 수 있습니다.

그 정수 값은 접근할 수 있는 최대 허용치 만큼 동시에 사용자 접근을 할 수 있게 합니다.

뮤텍스의 동작 원리

뮤텍스는 세마포어와 마찬가지로 병행 처리를 위한 동기화 기법 중 하나입니다.

이진 세마포어와 같이 초기값을 1과 0으로 가집니다.

임계영역에 들어갈 때 락(lock)을 걸어 다른 프로세스(혹은 쓰레드)가 접근하지 못하도록 하고,

임계영역에서 나와 해당 락을 해제(unlock) 합니다.

결론 : 뮤텍스와 세마포어의 차이는?

세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.

반면에 뮤텍스는 오직 1개만의 프로세스(또는 쓰레드)만 접근할 수 있습니다.

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

하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.