[CS] Mutex & Semaphore

Y_Y·2023년 5월 27일
0

CS

목록 보기
2/3

Mutex & Semaphore

교착상태

2가지 이상의 작업이 상대방이 끝나기까지 기다리는 상태

연필과 종이 각각을 갖고 있으면 필기를 할 수 없다
-> 서로의 자원을 놓아줄 생각은 없고 자원 요청을 무한정 대기하고 있는 상태 : 교착상태

연필과 종이 : 공유자원
공유자원이 속해있어 교착상태가 발생할 수 있는 영역 : 임계영역

교착상태가 만족하려면

상호 배제, 점유 대기, 비선점, 순환 대기
-> 이 4가지 조건 중 하나라도 만족하지 않으면 교착상태가 발생한다.

상호 배제

프로세스들이 필요로 하는 자원에 대한 배타적 통제권을 요구하는 것.

하나의 프로세스가 공유자원을 사용할 때 다른 프로세스가 동일한 공유자원에 접근할 수 없게 통제하는 것.

Mutex (Mutual + Exclusion)

여러 스레드를 실행하는 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 매커니즘

ex) 손님(스레드)과 식당(임계영역)

식당은 하나의 손님만 받을 수 있고, 손님이 있을 때는 가게의 문을 걸어잠그고 (Lock 방식) 한 명의 손님만 집중한다.
기존 손님이 식사를 마치고 나올 때 까지 다음 손님은 기다려야 한다.

대기하는 방식을 두가지 알 수 있다. (대기실, 식당 입구)

  1. Mutex는 대기 큐를 생성해두고 임계영역에 스레드가 있을 경우 다른 스레드가 공유자원을 사용하려고 하면 스레드를 blocking 하고 대기 큐에 sleep시킨다.

  2. SpinLock

식당에 손님이 있고 입구는 lock이 걸린 상태에서 다른 손님이 식당 입구에서 자리가 있는지 계속 기다리는 방식

기다리고는 있지만 계속해서 물어보는 행동을 Busy-waiting이라고 한다.

이 경우 종업원은 손님의 물음에 계속 대답해야하기 때문에 다른 업무처리를 할 수 없다. -> 비효율적

언제 사용하면 좋을까?

대기실까지 이동하는 시간보다 식당에 진입하게 될 시간이 더 짧은가?
= 컨텍스트 스위칭 시간이 더 짧은가?

직원이 여러 명 있는 식당인가?
= 멀티 코어 프로세스 인가?

Semaphore

멀티프로그래밍 환경에서 다수의 프로세스나 스레드의 여러 개의 공유 자원에 대한 접근을 제한하는 방법으로 사용된다.

Mutex와 다르게 멀티 스레드가 동시에 접근할 수 있다.

수용 가능한 수만큼 숫자를 표시하고 없을 경우 0을 표시한다.

어느 순간에 숫자를 갱신해야 하는가?
-> 들어올 때, 나갈 때 / P(wait), V(signal)을 사용한다.
(Atomic operation이라고 생각하면 된다.)

들어올 때 P를 입력하고, 나갈 때 V를 입력하고 숫자를 갱신.

Sleep waiting
대기 큐에서 잠자고 있다가 사용 가능한 큐가 생기면 잠자고 있던 스레드를 깨우는 방식

busy waiting
사용 가능한 자원이 생길 때 까지 계속 검사

++ Mutex는 0, 1로 이뤄진 세마포어라고 할 수 있다.

Velog 출처
우아한테크 10분 테코톡

profile
남을 위해(나를 위해) 글을 쓰는 Velog

0개의 댓글