Notice
Recent Posts
Recent Comments
Link
쟈미로그
뮤텍스와 세마포어 본문
동기화 과정에서 공유 자원에 접근하는 임계 영역에 대한 관리를 어떻게 해주어야 문제들이 발생하지 않을까?
뮤텍스와 세마포어를 사용하면 공유 자원에 대한 여러 스레드/프로세스의 동시 접근을 막을 수 있다.
1. 뮤텍스 (Mutex)
뮤텍스
는 공유 자원에 접근 스레드들의 실행 시간이 서로 겹치지 않게 단독으로 실행되게 하는 방법이다.
말 그대로 상호 배제(Mutual Exclusion)의 약자다.
임계 구역에 들어갈 때 lock을 걸고 나갈 때 unlock해서 접근을 조율한다.
2. 세마포어 (Semaphore)
세마포어
는 다수의 프로세스/스레드의 n개의 공유 자원에 대한 접근을 제한하는 방법이다.
뮤텍스와의 다르게 여러 스레드가 동시에 한 공유 자원에 접근할 수 있다!
접근 가능한 스레드 개수를 지정해서 count하며 스레드의 동기화를 구현한다.
count 방법
그렇다면 어떻게 스레드 접근 개수를 셀까?
세마포어는 P, V 연산
을 통해서 공유 자원에 접근한 스레드들의 개수를 센다.
- P : 임계 구역에 들어가는 스레드는 P 연산 수행
- V : 임계 구역에서 나오는 스레드는 V 연산 수행
스레드들의 대기 방법
Sleep-Waiting
: 대기 큐에서 sleep 하다가 사용 가능한 자원이 생기면 잠자고 있던 스레드를 깨우는 방식.SpinLock
: lock이 반환될 때까지 계속해서 확인하며 기다리는 방식. (Busy-Waiting) 무한 루프를 돌면서 최대한 다른 스레드에게 CPU를 양보하지 않는 것.
SpinLock 사용하는 경우?
(1) 컨텍스트 스위칭 시간이 Lock을 앞으로 얻을 시간보다 더 길 것 같다면, SpinLock 사용이 나을 수 있다. (컨텍스트 스위칭을 줄일 수 있다)
(2) 멀티코어 프로세스인 경우.
(이 후에 Java의 동기화 및 locking 기법들 알아보는 게시물도 써보자)
참조
https://www.youtube.com/watch?v=oazGbhBCOfU
https://brownbears.tistory.com/45
https://gyoogle.dev/blog/computer-science/operating-system/Semaphore%20&%20Mutex.html
'CS > OS' 카테고리의 다른 글
임계영역, 경쟁상태(Race Condition)와 교착상태(DeadLock) (1) | 2022.11.22 |
---|---|
프로세스와 스레드, 멀티 프로세스와 멀티 스레드 (0) | 2022.11.22 |
운영체제, 커널, 메모리 구조에 대해 (1) | 2022.11.21 |
Comments