#include <semaphore.h>
위와 같이 선언해서 사용 가능
sem_init(sem_t *sem, int pshared, unsigned int value);
sem_wait(sem_t *s) // csapp.h -> P(sem_t *s)
sem_post(sem_t *s) // csapp.h -> S(sem_t *s)
위 세 함수 사용 가능
기본적으로 카운팅 세마포어이다 !!
sem_t {
int count; // 현재 카운트 값
queue<thread> waiters; // 대기 중인 스레드들 (FIFO or priority queue)
}
내부적으로 대기중인 스레드들을 펜딩 큐에 저장해둠 !!
→ Wait() 함수와 같다
해당 세마포어의 count값을 1감소시킨 후, 0보다 크거나 같다면 진입한다 !!
만약 0보다 작다면, block 상태로 waiters 큐에 들어간다