Mutex vs Semaphore

c4fiber·2023년 12월 25일
0

SW사관학교 정글7기

목록 보기
39/49

Mutex


MUTual EXclusive 상호 배제

한쪽이 1 이면 반대쪽은 반드시 0, 그의 반대도 항상 성립해야 한다.

lock을 구현할 때 도입되는 개념이다.

하나의 스레드가 어떠한 값에 mutex를 걸었을 경우(0으로 세팅했을 경우) 다른 스레드는 해당되는 변수 혹은 값에 접근할 수 없다.

또한 mutex(lock)을 오직 lock을 걸었던 스레드만 해제할 수 있다.

Semaphore


세마포어는 동기화된 카운터 역할을 한다. 한 스레드가 세마포어가 지정된 값에 접근하기 위해서는 Down(P)를 수행해야 한다.

주로 초기화 되는 값은 1 이상이다. 숫자 N으로 초기화 되었다고 가정하면 최대 N개의 스레드가 동시에 값에 접근할 수 있다는 것을 의미한다.

이 값이 0이면 Down를 수행할 수 없으며, 다른 스레드가 Up(V)를 수행해서 0보다 큰 값이 되도록 설정해주기를 기다려야 한다.

세마포어의 값을 0으로 초기화 할 때?

세마포어의 값을 0으로 초기화 하는 경우도 있는데, 이 경우 원하는 작업이 단 한 번만 수행될 때를 상정한다.
예를 들어 스레드 A가 스레드 B를 실행시키면서 semaphore 값 0을 전달해주고 Down을 시도한다. 스레드 B가 작업을 완료한 뒤 semaphore를 Up하면 값이 1로 세팅되고, 이때 A가 Down에 성공하면서 작업을 이어나갈 수 있게 된다.

profile
amazing idiot

0개의 댓글