We.TIL 번외 : 뮤텍스 & 세마포어

김기욱·2020년 7월 29일
0

We.TIL

목록 보기
17/69

세마포어

공유된 자원에 여러 프로세스, 쓰레드가 동시에 접근하면 상호간에 메시지 전송에서의 오류 등 문제가 발생될 가능성이 있다. 이런 경우 공유된 자원 속 하나의 데이터는 하나의 프로세스만 접근할 수 있도록 제한해 두어야 할 필요성이 있는데 이를 위해 고안된 것이 Semaphore이다.

Semaphore의 원 의미는 철도의 까치발 신호기 또는 해군의 수기 신호란 의미가 있는데, 컴퓨터 공학용어인 세마포어에서도 데이터에 접근할때 신호를 주어 막는다는 개념에서 단어를 공유한다. 쉽게말하면 빨간불/초록불이 있는 신호기를 데이터까지 가는 길목에 세워둬 프로세스를 줄 세운다는 식으로 이해하면 될 것이다.

세마포어는 리소스(자원)에 접근할 데이터 숫자를 임의대로 조정할 수 있는데 세마포어에 카운트를 4로 해둔다면 4명까지는 접근을 열어주고, 그 이후에 도착한 사람은 일단정지! 시키는 것과 비슷하다.

뮤텍스

뮤텍스는 상호배제란 의미다. 쉽게 말해 딱 1명만 들여보내는 세마포어라고 생각하면 이해가 편할 것이다.
그러므로 뮤텍스는 세마포어가 될 수 있지만, 세마포어는 뮤텍스가 될 수 없다. 세마포어가 더 큰 집합인 것이다.
물론 작동기전은 다르다. 뮤텍스는 Critical Section을 가진 쓰레드들의 Running time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술이다. 다중 프로세스들의 공유리소스에 대한 접근을 조율하기 위해 lockingunlocking을 실행한다. 결론적으로 Mutex 객체는 두 쓰레드가 동시에 사용할 수 없다.
세마포어가 자원으로 가는 길목에 신호기를 설치하는거라면, 뮤텍스는 자원 자체에 자물쇠를 걸어두고 1명한테만 열쇠를 주는 방식이라고 보면 된다.

세마포어와 뮤텍스의 차이

뮤텍스는 항상 접근허용이 무조건 1개이며, 세마포어는 여러개 가질수 있다.
세마포어는 파일시스템 상 파일형태로 존재하지만, 뮤텍스는 프로세스 범위다.
즉, 프로세스가 사라질 때 뮤텍스는 클린업이 된다.
세마포어는 소유할 수 없지만, 뮤텍스는 소유할 수 있다.
뮤텍스의 경우, 뮤텍스를 소유하고 있는 쓰레드가 이 뮤텍스를 해제할 수 있다.
반면, 세마포어의 경우 세마포어를 소유하고 있지않은 쓰레드도 이 세마포어를 해제할 수 있다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글