본문 바로가기
CS

[컴퓨터구조] 상호배제(Mutual Exclusion) 뮤텍스(Mutex) & 세마포어 (Semaphore)

by SiO2whocode 2025. 3. 10.

동일한 데이터를 동시성 프로그래밍 등으로 인해 여러 프로세스, 여러 스레드가 동시에 접근할 수 있다면, 다른 프로세스에 의해서 변경되거나 삭제된 값으로 인해 다른 프로세스에서 오류가 발생할 수 있다.

여러 프로세스가 동시에 접근하는 데이터 영역을 임계 영역(Critical Section)이라고 부르고 이를 최소화할 수 있도록 프로그램을 설계하는 것이 중요하다.

동일한 데이터를 여러 프로세스가 동시에 접근해서 사용한다면 오류가 발생할 수 있기 때문에, 한 프로세스가 해당 자원을 사용하고 있을 때 다른 프로세스의 접근을 막는 상호배제(Mutual Exclusion) 방법이 필요하다.

 

이 상호 배제 방법에는 세마포어와 뮤텍스가 있다.

 

두 방법 모두 자원에 대해서 mutex, semaphore에 관한 명령어를 호출하는게 아니라 프로세스 내에서 뮤텍스나 세마포어로 lock을 한 구간에서 접근하는 자원에 대해서 적용되는거라, 세마포어 방식이 양심적으로 작동하는 것 같다.. 음.. 내부적인 원리를 더 공부해야할 것 같음..특히 세마포어

 

  • 뮤텍스 (Mutex)

뮤텍스는 하나의 공유 자원에 대해 key라는 객체를 소유하고 있는 프로세스 혹은 스레드만 접근할 수 있도록 하는 방식이다.

(자원 당 key 오브젝트는 한 개가 있다는 가정.)

뮤텍스 방법을 키가 하나인 공용 화장실에 비유한 것이 이해하기 쉬웠다.

  • 세마포어 (Semaphore)

세마포어는 하나 이상의 공유 자원에 대해 접근할 수 있는 프로세스 혹은 스레드의 수(세마포어)를 배정해놓고 그만큼의 프로세스만 접근할 수 있도록 함.

프로세스는 본인이 사용할 때 세마포어 수를 1 줄이고, 사용을 끝낼 때 세마포어 수를 1 증가시키는 식으로 작동

기다리고 있던 프로세스는 해당 공유 자원의 세마포어 수가 1이상일 때 사용할 수 있음.

여러 칸을 가진 공용 화장실의 빈칸의 개수를 보여주는 전광판이 있다는 비유가 이해하기 쉬웠음.

 

뮤텍스와 세마포어의 차이점

  • 뮤텍스는 공유자원 하나에 대한 방법, 세마포어는 공유자원 여러개에 적용될 수 있음
  • 뮤텍스는 세마포어 값이 1인 것으로도 볼 수 있음
  • 뮤텍스는 자원을 소유한다는 개념이지만, 세마포어는 소유 개념은 아님
  • 뮤텍스는 소유하고 있는 스레드 혹은 프로세스만 뮤텍스를 해제(unlock)할 수 있지만, 세마포어는 소유하고 있지 않은 프로세스 or 스레드도 값을 변경할 수 있다고 함..
728x90