[philosophers] semaphore란?

J_JEON·2022년 9월 9일
0

Philosophers

목록 보기
5/5

semaphore

  • 여러 스레드나 프로세스에서 하나의 공유자원을 사용하여 누군가는 값을 변경시키고, 누군가는 값을 읽는것이 동시에 일어나 잘못된 값을 읽어오는 등의 문제를 해결하기위해 사용
  • mutex와 같이 임계구역을 설정하여 공유자원에 대한 접근을 제어한다.
    하지만 한번에 하나의 프로세스의 접근을 허용하는 mutex와 다르게 semaphore는 복수의 프로세스에대해 접근을 제어할 수 있다

sem_open

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_wait(sem_t *sem);

세마포어 value를 -1하고 접근한다, 만약 이미 value가 0이라면 다른 프로세스가 post할때까지 대기
*sem = 참조할 세마포어

sem_post

sem_post(sem_t *sem);

참조중인 세마포어를 반납하고 세마포어 value를 +1 한다
*sem = 참조해제할 세마포어

sem_close

sem_close(sem_t *sem);

할당된 세마포어를 모두 할당 해제해주는 함수
wait으로 사용중인 세마포어가 있다면 모두 할당 해제가 된다
*sem = 할당 해제할 세마포어

sem_unlink(const char *name);

생성한 세마포어를 삭제해주는 함수
wait으로 사용중인 세마포어가 있다면 바로 삭제되지않고 post로 사용해제된 이후 삭제된다
*name = 삭제할 세마포어의 이름

profile
늅늅

0개의 댓글