semaphore operation의 pseudo code입니다.
S.value의 초기값은 1입니다.
void wait(semaphore S)
{
S.value--;
if(S.value < 0) {
add this process to S.L;
block();
}
}
void signal(semaphore S)
{
S.value++;
if(S.value <= 0) {
remove a process P from S.L;
wakeup(P);
}
}
2개의 프로세스가
wait(S);
[critical section]
signal(S);
이러한 동일한 코드를 동시에(시분할 로) 실행한다고 했을때..