먼저 임계영역은 무엇인가?
임계영역(Critical Section) 이란?
동시접근, 공유되는 자원에서 문제가 발생하지 않도록 독점을 보장해줘야하는 영역을 뜻한다.
뮤텍스와 세마포어는 동시성 프로그램의 공유자원 관리 중 한가지 방법인 상호배제를 달성하는 기법이다.
상호배제는 임계구역은 어느 시점에든지 한 개의 프로세스만 사용할 수 있도록 하는 것이다. ( Lock )
뮤텍스(Mutex)
사람 : 스레드, 프로세스
화장실 : 자원
예를 들어 화장실을 갈 때 Key를 가지고 가는 것과 같다.
어느 사람(1명) 이 화장실을 갈 때 Key를 가지고가면 화장실에는 사람이 있는 것이며,
화장실을 가고 싶은 사람은 대기를 해야한다.
또한, 화장실을 가고 싶은 사람이 추가된다면 순서대로 줄을 서야한다.
화장실에서 사람이 나오면 순차적으로 Key를 받아 사용이 가능하다.
- 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 동기화 or 락을 사용
- 뮤텍스 객체를 두 스레드가 동시에 사용 불가능
뮤텍스는 Key 에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 (쓰레드,프로세스) 만이 공유자원에 접근가능
세마포어(Semaphore)
뮤텍스의 예와 비슷하다.
조금 더 화장실을 사용하기 쉽다.
화장실이 3개라고 생각한다.
화장실을 사용하고 있을 때는 빈칸을 나타내는 전광판에서 차감해주고 화장실에서 나오면 다시 증가해준다.
0이 된다면 그 다음 사람은 1이 될때까지 기다려야하고 1이 되면 바로 사용한다.
- 공유자원에 접근할 수 있는 프로세스의 최대 허용치만큼 사용자가 동시에 접근 가능
- 자원을 사용하지 않는 상태가 되면, 대기하던 프로세스가 즉시 자원을 사용
- 각 프로세스는 세마포어의 값을 확인하고 변경 가능
현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법
차이점
가장 큰 차이점은 화장실(동기화 대상)의 개수이다.
- 뮤텍스는 동기화 대상이 오직 1개이며, 세마포어는 1개 이상일 때 사용한다.
- 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.
( 뮤텍스는 0 , 1로 이루어져 있는 바이너리 세마포어 )
- 뮤텍스는 자원을 소유할 수 있지만, 세마포어는 소유가 불가능하다.
- 뮤텍스는 Lock을 획득한 프로세스가 반드시 그 Lock을 해제해야한다.
세마포어는 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다.
- 뮤텍스는 자원 소유와 책임을 가질 수 있지만, 세마포어는 자원 소유가 불가능하다.
( 뮤텍스는 Lock 을 가지고 있다 , 상태가 2개뿐 )
참고
https://worthpreading.tistory.com/90
https://heeonii.tistory.com/14
https://chelseashin.tistory.com/40
https://jwprogramming.tistory.com/13
'Knowledge > CS' 카테고리의 다른 글
[CS] 인덱스(Index) 란? (0) | 2022.12.04 |
---|---|
[CS] 객체지향 프로그래밍이란? (0) | 2022.12.03 |
[CS] HTTP1.1 의 keep alive 란? (0) | 2022.12.01 |
[CS] 프로세스와 스레드 개념, 차이 (0) | 2022.11.30 |
[CS] 대칭키 암호화, 비대칭키 암호화 (0) | 2022.11.29 |
댓글