2019. 7. 25. 23:30ㆍ임베디드/리눅스시스템프로그래밍
세마포어란 깃발을 이용한 신호체계로, 뮤텍스와 같이 임계 영역을 보호하기 위한 수단이다
1. Counting Semaphore
- 세마포어의 초기값을 n으로 설정
- n번째 프로세스까지는 대기 없이 접근이 가능
- (n+1)번째 프로세스부터는 자원이 가능할 때까지 blocking 되어진다
- semaphore를 획득한 프로세스가 release 하면 기다리던 프로세스가 깨어나서 semaphore를 획득한다
2. Binary Semaphore
- 초기값을 1로 설정한 Counting Semaphore와 같으며, 곧 Mutex와 같다
POSIX Semaphore(unnamed)
1. sem_init
int sem_init(sem_t *sem, int pshared, unsigned int value)
pshared 0 : thread 간 공유
pshared 1 : process 간 공유
value는 semaphore의 초기값을 의미한다
2. sem_destory
다른 프로세스 혹은 스레드가 blocking 중인 semaphore의 destroy는 주의해야 한다
POSIX Semaphore(named)
1. sem_open
sem_t *sem_open(const char *name, int oflag,
mode_t mode, unsigned int value);
name에는 경로를 기입하고, oflag는 보통 O_CREAT를 넣게 된다
mode는 기본 0644, 마지막 value에는 1을 넣으면 binary 그 이상은 counting으로 동작하게 된다
그리고 공통적으로 blocking 함수인 sem_wait로 세마포어를 취득하고, sem_post로 세마포어를 반납하게 된다
아래 예제는 counting semaphore로 생성한 후 show/wait/trywait/timedwait/release을 선택할 수 있다
깃허브주소: https://github.com/surinoel/linux/blob/master/ipc/sem_posix_named.c
'임베디드 > 리눅스시스템프로그래밍' 카테고리의 다른 글
쉘 스크립트 프로그래밍 - 1 (0) | 2019.10.04 |
---|---|
detach를 통한 스레드 반환 (0) | 2019.07.26 |
sigprocmask oldset (0) | 2019.07.24 |
alarm과 sleep (0) | 2019.07.24 |
wait와 waitpid (0) | 2019.07.23 |