리눅스 맨페이지를 보려면 man sem_overview 하십시오
- System V semaphores' API
- semget(), semctl(), semop()
- POSIX semaphores' API
- sem_init(), sem_wait(), sem_post(), sem_destroy()
- System V 세마포어와 POSIX 세마포어의 차이점
System V Semaphores POSIX Semaphores API's semget(), semctl(), semop() sem_init(), sem_wait(), sem_post(), sem_destroy() ... 세마포어 카운터
자유로움 1단위로 증감 세마포어 권한 가능 불가 원자적 초기화 및 생성 아니오
예
API의 직관성 떨어짐 우수함 세마포어들 간의 관계 배열 관계
각각의 개체 여러 프로세스 간 유효한 세마포어 가능 불가(Unnamed semaphores)
성능
상대적으로 떨어짐 상대적으로 더 우수 - 세마포어와 뮤텍스의 차이점
- 세마포어는 뮤텍스로 쓸 수 있지만, 뮤텍스는 세마포어의 역할을 할 수 없다. 즉 바이너리 세마포어는 뮤텍스와 같이 동작한다.
- 세마포어는 소유자가 없고, 뮤텍스는 소유자가 있다.
- 뮤텍스는 한 프로세스 내부에서 쓰레드 간에 리소스를 동시에 접근할 수 없게하기 위해 사용하고, 기본적으로 세마포어는 공유된 자원을 정해진 수 만큼만 사용하도록 제한하기 위해 사용한다.
- 세마포어는 파일 형태로 구현되며, 명시적으로 종료하지 않는 한 시스템 전체에 영향을 미치게 할 수 있다(다른 프로세스 사이에서도). 반대로 뮤텍스는 한 프로세스 안에서만 유효하며 프로세스가 종료되면 사라진다.
- 뮤텍스가 세마포어 보다 가벼우며 사용하는 문법도 더 간단하다.
- 세마포어의 기본 알고리즘
- Wait (Lcok)동작: 얻으려고 하는 세마포어의 카운트가 0보다 작거나 같으면 무한 대기하고 있다가, 0보다 커지면 카운트를 -1한다.
- Signal (Unlock)동작: 세마포어 카운트를 1 증가시킨다.