- 여러 스레드나 프로세스에서 하나의 공유자원을 사용하여 누군가는 값을 변경시키고, 누군가는 값을 읽는것이 동시에 일어나 잘못된 값을 읽어오는 등의 문제를 해결하기위해 사용
- mutex와 같이 임계구역을 설정하여 공유자원에 대한 접근을 제어한다.
하지만 한번에 하나의 프로세스의 접근을 허용하는 mutex와 다르게 semaphore는 복수의 프로세스에대해 접근을 제어할 수 있다
sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
이름있는 semaphore를 생성하는 함수
*name = 생성하고자하는 semaphore의 이름
oflag = 세마포어의 플래그, O_CREAT, O_EXCL이 있으며 조합도 가능 O_CREAT은 생성관련 플래그, O_EXCL은 중복된 이름의 세마포어가 있는지 체크하는 플래그
mode = 접근 권한을 설정하는 옵션
value = 세마포어의 수이며 0이상의 양수이어야함, 7이라면 한번에 7개만큼 접근을 허용함
sem_wait(sem_t *sem);
세마포어 value를 -1하고 접근한다, 만약 이미 value가 0이라면 다른 프로세스가 post할때까지 대기
*sem = 참조할 세마포어
sem_post(sem_t *sem);
참조중인 세마포어를 반납하고 세마포어 value를 +1 한다
*sem = 참조해제할 세마포어
sem_close(sem_t *sem);
할당된 세마포어를 모두 할당 해제해주는 함수
wait으로 사용중인 세마포어가 있다면 모두 할당 해제가 된다
*sem = 할당 해제할 세마포어
sem_unlink(const char *name);
생성한 세마포어를 삭제해주는 함수
wait으로 사용중인 세마포어가 있다면 바로 삭제되지않고 post로 사용해제된 이후 삭제된다
*name = 삭제할 세마포어의 이름