lock을 잡기 위해 오랜 시간을 기다려야 할 것 같으면 다른 작업을 동시에 진행할 수 있다.
busy waiting 하지 말고, blocking
되어 기다리자.
자원을 단시간에 얻을 수 있게 되는 경우 차라리 spin lock이 효과적이다. context switching에 더 큰 자원을 낭비하게 될 수 있는 문제를 초래한다.
문맥 교환(context switching)이 일어나지 않는다. 자원을 단시간에 얻을 수 있게 되는 경우 context switching 비용이 들지 않아 효율을 높일 수 있다.
다른 작업을 동시에 진행하지 못하고 진입 가능할 때 까지 계속 기다리는 busy waiting
방식이다.
lock을 잡을 때 까지 끊임없는 무한 루프를 통해 critical section에 진입을 재시도하기 때문에, 하나의 스레드가 계속 CPU를 점유하고 있는 상태이므로, 자원을 단기간에 얻지 못하게 되는 경우 CPU의 낭비를 초래한다. 또한, lock을 잡고 있는 애가 preemtive 되면 이 lock을 잡기 위해 spin lock을 수행 중이던 프로세스는 한타임 내내 CPU의 낭비를 초래한다.
하나의 프로세스
가 접근하는 것을 방지하나
이다. semaphore과 차이점한칸
밖에 없는 것과 같음.여러 개의 프로세스
가 접근하는 것을 방지하나 이상
이다. mutex와 차이점여러 칸
이 존재하는 것과 같음.각 사용자는 사용할 수 있는(즉, 비어있는) 화장실 칸 갯수를 알 수 있음.
출처 https://cocoon1787.tistory.com/541
1
인 경우 이를 mutex처럼 사용할 수 있다.mutex는 동기화 대상 오직 하나,
semaphore은 동기화 대상 하나 이상
mutex는 락을 걸은 스레드만이 락 해제 가능,
semaphore은 락을 걸지 않은 스레드도 signal을 보내 락 해제 가능