본문 바로가기

프로그래밍/C,C++

[Linux] 세마포어 설정

 

#include <semaphore.h>

int sem_init(sem_t *sem, int pshared, unsigned int value);

int sem_wait(sem_t * sem);

int sem_trywait(sem_t * sem);

int sem_post(sem_t * sem);

int sem_getvalue(sem_t * sem, int * sval);

int sem_destroy(sem_t * sem);

 

sem_init : 세마포어 객체를 value 값으로 초기화.

 pshared = 0 :  현재 프로세스에서 사용

pshared != 0  : 여러 프로세스 간에 공유

* 현재 Linux는 세마포어가 여러 프로세스 간에 공유되는 것을 지원하지 않음 

 

sem_wait :  세마포어의 값을 1 줄이고, 세마포어의 값이  0 경우 대기.

 

sem_trywait :  sem_wait 의 넌블로킹(non-blocking) 버전. 

세마포어의 값이 0이 아니면, 카운터 값은 감소되며 sem_trywait 는 즉시 0을 반환. 

세마포어의 값이 0이면 ,sem_trywait 는 즉시 EAGAIN 을 반환.

 

sem_post :  세마포어의 값을 증가.

이 함수는 절대로 블록되지 않으며, 비동기 시그널 핸들러에서도 안전하게 사용.

 

sem_getvalue :  sval 이 가리키는 위치에 sem 세마포어의 현재값을 저장.

 

sem_destroy : 세마포어 객체를 삭제하고 할당된 자원을 해제. 

sem_destroy 를 호출하는 시점에서 해당 세마포어를 기다리는 쓰레드가 없어야 한다. 

LinuxThreads 에서는 sem_destroy 는 단지 해당 세마포어를 기다리는 쓰레드가 없는지 검사하는 일만을 수행.

'프로그래밍 > C,C++' 카테고리의 다른 글

[C#] 파일 읽고,쓰기 기초  (0) 2013.09.12
[C#] 이미지 처리 기본 사항들  (0) 2013.09.12
[C#] 이벤트  (0) 2013.09.12
[C#] 폼 띄우기  (0) 2013.09.12
GCC 옵션  (0) 2011.07.21
POSIX 쓰레드 함수들  (0) 2010.04.16
[Linux] 라이브러리  (0) 2010.01.28
바이트오더~ 비트 스트림~  (0) 2009.06.04
delete obj, delete [] obj 차이  (0) 2009.06.04
[C]  (0) 2009.06.04