티스토리 뷰
전 포스팅에서 Deadlock. 즉, 교착상태에 알아보았으니
이번 포스팅에선 뮤텍스와 세마포어의 차이에 대해 알아보겠습니다.
혹시, 데드락에 대해 잘 모르는 상태라면 전 포스팅 또는 하단의 Youtube 강의를 보고 보시면 더 도움이 됩니다!
2022.07.19 - [운영체제] - [운영체제] Deadlock (데드락, 또는 교착상태)
https://www.youtube.com/watch?v=Ry_gB34cvwc
❓ 데드락?
바로 전 포스팅에서 언급했던 것과 같이 데드락이 발생하기 위해서는 다음과 같은 4가지 조건이 필요합니다.
1. 상호 배제 조건
2. 점유 대기 조건
3. 비선점 조건
4. 순환 대기 조건
이 중 상호 배제 조건을 해결하기 위한 방법이 바로 뮤텍스(Mutex)와 세마포어(Semaphore)입니다.
📚 뮤텍스 (Mutex)
뮤텍스는 mutual과 exclusion의 합성어로,
여러 스레드를 실행하는 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 메커니즘을 말합니다.
1. Boolean 타입의 Lock 변수를 사용하여 자원에 대한 접근을 제한합니다.
2. 임계영역 (critical section)의 자원에 접근하면 해당 스레드는 Lock을 걸어버립니다.
이 때, 다른 스레드가 공유자원에 접근하면 Blocking 후 대기 큐로 보냅니다.
3. 공유자원 사용을 마친 스레드는 Lock을 해제합니다. Lock 해제는 Lock을 건 스레드만 해제할 수 있습니다.
📚 세마포어 (Semaphore)
세마포어는 변수를 통해 접근 가능한 스레드를 제한합니다.
뮤텍스는 1개의 스레드만 자원을 사용할 수 있었으나, 세마포어 변수만큼 공유 자원에 접근할 수 있습니다.
1. 세마포어 변수를 통해 wait, signal을 관리합니다. 세마포어 변수는 0 이상의 정수 값을 갖습니다.
2. 세마포어 변수가 1개인 경우, 뮤텍스처럼 사용이 가능합니다.
3. 뮤텍스와 달리 Lock을 걸지 않은 스레드도 signal을 보내 Lock을 해제할 수 있습니다.
'운영체제' 카테고리의 다른 글
[운영체제] Deadlock (데드락, 또는 교착상태) (0) | 2022.07.19 |
---|
- Total
- Today
- Yesterday
- 완전탐색
- 운영체제
- BOJ
- 정처기
- 아이템61
- 알고리즘
- springboot
- docker-compose
- 아이템59
- 부분집합
- subset
- 순열
- 아이템60
- OS
- 그래프탐색
- 완탐
- dfs
- BFS
- 조합
- Java
- 이펙티브자바
- Retrofit2
- IMAGE
- 백준
- bruteforce
- Container
- docker
- dp
- EffectiveJava
- 토큰기반인증
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |