여러 process, thread가 공유자원을 안전하게 사용할 수 있도록 해주는 동기화 도구
함수
- sem_init(&sem, 1, value)
- 1 -> cross process
- value. -> 자원 개수
- sem_wait(&sem)
- 자원 요청
- sem > 0이면 sem -- 후 진행
- sem == 0 이면 대기
- 자원 요청
- sem_post(&sem)
- 자원 반납
- sem++ 후 대기중인 thread 중 하나를 깨움
- 자원 반납
종류
- posix
- unnamed -> sem_init으로 생성
- cross_process_semphore -> unnamed에서 cross process 설정
- named
- sem_open("/sem_name", O_CREATE, 0644, 1); -> sem_t*를 리턴
- sem_close(&sem)
- sem_unlink("/sem_name")
- system V
- semget(nsems) - 생성
- 세마포어 개수
- semctl - 초기값 설정
- semop - wait signal 수행
- sembuf를 사용
- { 세마포어 번호, 수행할 연산, 옵션 }
- +1 -> post
- -1 -> wait
- { 세마포어 번호, 수행할 연산, 옵션 }
- sembuf를 사용
- semget(nsems) - 생성