race condition(경쟁조건)
동기화 (synchronization)
임계 영역 (critical section)
즉, 컨텍스트 스위칭으로 하던 중간에 바뀌는 경우는 없다고 한다.
이 방식을
하지만 단점, 기다리는 동안 CPU를 계속 낭비한다.
즉 , 락이 준비됐을 때 츄라이 하면 된다.
→
→ 뮤텍스, 락을 가질 수 있을 때까지 휴식
그럼 드는 의문 —> 뮤텍스가 스핀락보다 항상 좋은걸까?
ans) 멀티 코어 환경이고, critical section에서의 작업이 컨텍스트 스위칭보다 더 빨리 끝난다면 스핀락이 뮤텍스보다 더 이점이 있다.
semaphore(세마포)
signal mechanism을 가진, 하나 이상의 프로세스/스레드가 critical section에 접근 가능하도록 하는 장치
signal()과 wait()을 하나의 스레드나 프로세스에 꼭 넣어둘 필요는 없다.
드는 의문 → 뮤텍스와 이진 세마포어는 같은 것이 아닌가?
→ 뮤텍스는 락을 가진 자만 락을 해제 할 수 있지만, 세마포어는 그렇지 않다.
뮤텍스는 priority inheritance 속성을 가진다. 하지만 세마포어는 그 속성이 없다.
priority inheritance 은 우선순위로 스케쥴링을 하는 것인데,
low P2의 우선순위를 high만큼 올려서 스케쥴링을 하는 방법
추가적인 공부 필
→ 상호 배제만 필요하다면 뮤텍스를, 작업 간의 실행 순서 동기화가 필요하다면 세마포어를 권장한다.
출처 | 쉬운코드 유튜브