[Linux] 세마포어 설정
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_wait(sem_t * sem);
int sem_trywait(sem_t * sem);
int sem_post(sem_t * sem);
int sem_getvalue(sem_t * sem, int * sval);
int sem_destroy(sem_t * sem);
sem_init : 세마포어 객체를 value 값으로 초기화.
pshared = 0 : 현재 프로세스에서 사용
pshared != 0 : 여러 프로세스 간에 공유
* 현재 Linux는 세마포어가 여러 프로세스 간에 공유되는 것을 지원하지 않음
sem_wait : 세마포어의 값을 1 줄이고, 세마포어의 값이 0인 경우 대기.
sem_trywait : sem_wait 의 넌블로킹(non-blocking) 버전.
세마포어의 값이 0이 아니면, 카운터 값은 감소되며 sem_trywait 는 즉시 0을 반환.
세마포어의 값이 0이면 ,sem_trywait 는 즉시 EAGAIN 을 반환.
sem_post : 세마포어의 값을 증가.
이 함수는 절대로 블록되지 않으며, 비동기 시그널 핸들러에서도 안전하게 사용.
sem_getvalue : sval 이 가리키는 위치에 sem 세마포어의 현재값을 저장.
sem_destroy : 세마포어 객체를 삭제하고 할당된 자원을 해제.
sem_destroy 를 호출하는 시점에서 해당 세마포어를 기다리는 쓰레드가 없어야 한다.
LinuxThreads 에서는 sem_destroy 는 단지 해당 세마포어를 기다리는 쓰레드가 없는지 검사하는 일만을 수행.