Written by
LSM
on
on
TIL:세마포어, 뮤텍스, 모니터
동기화
한정적인 시스템 자원에 여러 스레드가 동시 접근해 사용하면 문제가 발생할 수 있다. 이런 문제를 방지해 ==스레드들에게 하나의 자원에 대한 처리 권한/순서를 조정해주는 기법==이다.
1. Mutex
- 상호배제
- 스레드들의 running time을 단독으로 실행하는 기술
-
다중 프로세스들의 공유 리소스 접근을 막기 위해 locking/unlocking 사용
2개 이상의 스레드는 mutex 객체를 동시에 사용 불가
2. Semaphore
- 리소스 상태를 나타내는 counter
- 다중 프로세스의 행동을 조정/동기화 시키는 기술
- os/커널의 지정된 저장 장치 내의 값. => 프로세가 확인해 변경 가능
- 일반적으로는 0, 1의 값을 사용
- 공유 자원에 하나의 프로세스만 접근을 가능하게 하 때 세마포어 사용
Mutex와 semaphore 차이점
1) 세마포어는 소유가 불가능하나 뮤텍스는 소유가 가능 _ _ _ 2) 뮤텍스를 소유한 쓰레드가 뮤텍스 해제 가능 _ _ _ 3) 세마포어는 소유하지 않은 쓰레드가 세마포어 해제 가능 _ _ _ 4) 뮤텍스는 동기화 대상이 오직 하나 일 때 세마포어는 동기화 대상이 1개 이상일 때 사용 _ _ _
3. Monitor
- 한 어플리케이션 내에 다른 스레드 간의 동기화할 때 사용 (뮤텍스의 경우는 다른 어플리케이션 간 스레드들을 동기화 할 때 사용한다고 보면 됨)
- 프레임워크, 라이브러니에서 제공