0) 개념

wait(S){
	while(S <= 0)
		; //busy wait -> 검사하는 과정을 뜻한다.
	S--;
}
siganl(S){
	S++
}

1) 세마포 사용법

2) 세마포 사용법

typedef struct{
	int value;      
	struct process *list;    /* 프로세스 제어 블록의 리스트에 대한 포인터 */
} semaphore;

wait(semaphore *S) {
	S -> value--;
	if (S->value <0) {
		add this process to S->list;
		sleep();
	}
}

signal(semaphore *S){
	S->value++;
	if (S->value <=0) {
		remove a process P from S-> list;
		wakeup(P);
	}
}