semaphore

여러 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