기명 세마포어 함수
System Program/semaphore 2014. 3. 10. 15:581. 세마포어의 종류
세마포어는 기명 세마포어와 무기명 세마포어의 크게 두가지 종류로 분류된다.
기명 세마포어는 말 그대로 이름이 있는 세마포어로 세마포어의 사용 및 구분은 이름을 통해서 할 수 있다.
하지만 무기명은 이름이 없어서 프로세스간에 공유하는 방식이 다르다.
무기명의 경우에는 세마포어 세마포어 디스크립터를 공유영역에 할당함으로써 프로세스 및 쓰레드간에
사용할 수 있다.
2. 세마포어 열기
새로운 기명 세마포어를 생성하거나 기존 파일을 열 때 사용한다. 각 인자의 사용법이나 내용은
메세지 큐의 부분과 같다. 따라서 자세한 내용은 메세지 큐 부분 참조
#include <fcntl.h>
#include <sys/stat.h>
#include <semaphore.h>
sem_t *sem_open(const char *name, int oflag, ...
/* mode_t mode, unsigned int value */);
성공하면 세마포어의 포인터를 리턴하고, 에러가 발생하면 SEM_FAILED를 리턴한다.
3. 세마포어 종료
#include <semaphore.h>
int sem_close(sem_t *sem);
성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴
4. 세마포어 제거
#include <semaphore.h>
int sem_unlink(const char *name);
성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴
5. 세마포어 대기
sem이 참조하는 세마포어의 값을 감소한다.
#include <semaphore.h>
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem); /* sem_wait() 함수의 비블로킹 버전이다. */
성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴
감소 동작을 즉시 실행될 수 없으면, sem_trywait()는 EAGAIN에러로 실패한다.
#include <semaphore.h>
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴
세마포어를 감소하지 못한체 시간이 만료되면 ETIMEDOUT 에러로 실패한다.
6. 세마포어 게시
sem이 참조하는 세마포어의 값을 증가한다.
#include <semaphore.h>
int sem_post(sem_t *sem);
성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴
7. 세마포어 현재값 추출
sem이 참조하는 세마포어의 현재값을 int형의 포인터 sval에 리턴한다.
#include <semaphore.h>
int sem_getvalue(sem_t *sem, int *sval);
성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴
'System Program > semaphore' 카테고리의 다른 글
무기명 세마포어 (0) | 2014.03.10 |
---|