Mutex (binary semaphore)
Semaphore
Counter
를 이용해 동시에 리소스에 접근할 수 있는 스레드 수를 제어한다Semaphore
는 세마포어 값 S를 이용하여 임계 영역에 접근할 수 있는 스레드의 수를 제어한다고 했다
이를 Pseudo Code로 표현하면 아래와 같다
P(S) : wait(S)
{
while (S <= 0)
;
S--;
}
V(S) : signal(S)
{
S++;
}
이 때 while
문을 통해 wait을 구성하는 위와 같은 방법을 Busy waiting
이라고 부른다
문제는, while문이 돌아가는 동안 CPU를 실행한다는 것이고, 이는 성능을 저하시키는 원인이 된다
따라서 이 부분을 Waiting Queue
를 이용하여 처리한다.
이를 Pseudo Code로 표현하면 아래와 같다.
wait (S)
{
S->count--;
if (S->count < 0)
{
add this process to S->queue;
block() //sleep()
}
}
signal (S)
{
S->count++;
if (s->count <= 1)
{
remove a process P from S->queue;
wakeup(P)
}
}