본문 바로가기
# Programming/- Embedded 관련 지식

공유 자원을 관리하는 두 가지 방법 : Mutex / Semaphore

by Graffitio 2023. 9. 1.
공유 자원을 관리하는 두 가지 방법 : Mutex / Semaphore
728x90
반응형
[개요]

 

Mutex와 Semaphore는 동시에 여러 프로세스나 스레드가

공유 리소스에 접근할 때 발생할 수 있는 문제를 관리하기 위한 동기화 기법이다.

이들은 프로그램에서 여러 스레드 또는 프로세스가

공유 자원을 안전하게 사용하도록 조절하는데 사용된다.

 


 

[Mutex]

 

📌 Mutex란?

Mutex

뮤텍스는 "상호 배제"를 의미하는 Mutual Exclusion의 약자로,

✅ 오직 하나의 스레드만이 특정 코드 블록을 실행하도록 보장하는 동기화 기법이다.

(공유 자원 1개에 하나의 User만 사용 가능, 동기화 대상이 1개)

 

이는 특정 리소스에 대한 접근을 한 번에 하나의 스테드만 가능하도록 하여,

데이터의 일관성과 안정성을 보장하고 하나의 스레드가 뮤텍스를 잠그면(획득하면),

다른 스레드들은 해당 뮤텍스를 얻을 때까지 대기하게 된다.

스레드가 작업을 마치고 뮤텍스를 해제하면, 대기 중인 다른 스레드 중 하나가 뮤텍스를 얻어

작업을 진행하게 된다.

 

식당 화장실을 생각해보자.

화장실의 수는 하나밖에 없고, 

화장실을 이용하기 위해서는 카운터에서 열쇠를 받아가야 한다.

손님이 화장실을 가려 할 때,

카운터에 키가 없다면, 화장실에 사람이 없다는 뜻이고

손님은 열쇠를 이용해 화장실에 들어갈 수 있다.

(화장실 = 공유 자원, 손님 = User, 열쇠 = Mutex)

 

정리하면, Mutex는 임계구역(Critical Selection)을 가진 스레드들의

실행 시간(Running Time)이 서로 겹치지 않고

각각 단독으로 실행(상호 배제, Mutual Exclusion)되도록 하는 기술을 의미한다.

 


 

[Semaphore]

 

📌 Semaphore란?

Semaphore

✅ 특정 리소스에 대한 접근 가능한 스레드 또는 프로세스의 수를 관리하는 동기화 기법이다.

세마포어는 정수형 변수로 표현되며,

값을 통해 몇 개의 스레드가 동시에 접근할 수 있는지를 조절한다.

 

세마포어 값이 1인 경우, 뮤텍스와 유사하게 동작하고

세마포어 값이 N인 경우, 최대 N개의 스레드가 동시에 접근할 수 있으며,

세마포어는 획득(원자적으로 값을 감소시킴)과

해제(원자적으로 값을 증가시킴)의 두 가지 기본 연산을 갖는다.

 

또 다시 식당 화장실을 생각해보자.

Semaphore는 화장실이 여러 개인 식당이이고,

또한 화장실 입구에는 현재 화장실의 빈 칸 갯수를 보여주는 전광판이 있다.

(화장실 = 공유 자원, 손님 = User, 빈 칸의 수 = 공유 자원에 접근 가능한 Task 수)

 

이러한 세마포어는 주로 "생산자-소비자" 문제와 같이

제한된 수의 자원을 공유하는 경우에 유용하게 사용되고

뮤텍스의 확장된 형태로도 볼 수 있다.

 


 

[Mutex와 Semaphore의 장단점]

 

  Mutex Semaphore
장점 단일 리소스의
상호 배제 제어
다중 리소스의
동시 접근 제어 가능
간단한 사용 및 이해 제한된 자원의 활용으로
효율적으로 관리 가능
데드락 가능성이 적음 복잡한 스레드/프로세스
동기화 시나리오에 유용
단점 한 번에 하나의 스레드만
접근 가능
카운트 값 관리로 인한
복잡성 증가
복잡한 상호 배제 문제에
적합하지 않을 수 있음.
데드락 가능성이
높을 수 있음.
효율적이지 않은 다중 리소스
관리 가능
 

 

데드락(Deaelock)

      프로세스나 스레드들이 서로가 갖고 있는 자원을 기다리며

      무한히 멈춰 있는 상태를 말한다.

      ▶데드락 발생 조건(동시 충족 시, 발생)

          - 상호 배제 : 한 번에 하나의 자원 사용 중

          - 점유 및 대기 : 자원이 점유되어 다른 유저가 대기 중

          - 비선점 : 점유된 자원을 강제로 탈취 불가

          - 순환 대기 : 프로세스 간, 자원을 원형으로 대기 중

 


 

[정리]

 

✅ Mutex는 주로 단일 리소스의 상호 배제에 사용되며,

     (하나씩만 사용 가능)

✅ Semaphore는 한정된 수의 리소스에 대한 접근을 제어하는 데 사용된다.

     (동시에 여러 개 사용 가능)

어떤 상황에서 어떤 동기화 기법을 선택할 지는 문제의 복잡도와 요구 사항에 따라 다르게 결정된다.

728x90
반응형