개념
뮤텍스(Mutex)
- Mutual Exclusion의 줄임말로, 동시서 제어를 위한 프로그래밍 개념 중 하나다.
- 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 보장하는 도구이다.
- 두 개 이상의 스레드가 동일한 작업을 하지 못하도록 뮤텍스를 사용하여 해당 자원에 접근을 직렬화한다.
예시로 열쇠로 잠겨있는 1인 화장실을 생각하면 된다.
- 화장실을 가려면 열쇠가 필수로 필요하다.
- 열쇠가 없다면 누군가 화장실을 사용 중이다.
- 열쇠가 생길 때까지 기다린다.
- 열쇠가 있다면 화장실엔 아무도 없는 거다
- 화장실을 이용한 본인만 열쇠를 제자리에 갖다 놓을 수 있다.
뮤텍스 작동 순서
- Look: 스레드가 공유 자원에 접근하기 전에 뮤텍스로 잠근다.(이미 잠겼다면 하제까지 기다린다.)
- Access: 뮤텍스가 잠겨있다면 해당 스레드만이 공유 자원에 접근할 수 있다.
- Unlock: 작어비 완료되면 스레드는 뮤텍스를 해제한다. 그 후 다른 스레드 접근이 가능하다
Spinlock
- 락이 해제될 때까지 계속해서 재시도를 하는 방식이다.
- 뮤텍스 같은 경우, 락을 얻지 못한 스레드는 대기 상태로 전환되는데 spinlock은 이런 대기 과정이 없다.
- 만약 락이 오랫동안 해제되지 않으면, 스레드는 CPU 시간을 낭비하여 계속해서 spinning 상태를 유지한다.
- 따라서 Spinlock은 보통 락 보유시간이 짧아질 것으로 예상되거나 대기 시간보다 context switch비용이 클 경우 사용한다.
'CS' 카테고리의 다른 글
[데이터베이스] 정규화란? (0) | 2023.10.04 |
---|---|
[네트워크] 웹 동작 방식 (0) | 2023.10.02 |
[자료구조] Tread와 Process의 차이 (쓰레싱) (0) | 2023.10.01 |
[자료구조] 해시테이블(Hash Table)이란? (0) | 2023.09.30 |
[자료구조]Array와 Linked List의 차이 (0) | 2023.09.30 |