세마포어

#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)
}

내부적으로 대기중인 스레드들을 펜딩 큐에 저장해둠 !!


sem_init()


sem_wait()

→ Wait() 함수와 같다

해당 세마포어의 count값을 1감소시킨 후, 0보다 크거나 같다면 진입한다 !!

만약 0보다 작다면, block 상태로 waiters 큐에 들어간다