기명 세마포어 함수

System Program/semaphore 2014. 3. 10. 15:58

1. 세마포어의 종류

 

세마포어는 기명 세마포어와 무기명 세마포어의 크게 두가지 종류로 분류된다.

기명 세마포어는 말 그대로 이름이 있는 세마포어로 세마포어의 사용 및 구분은 이름을 통해서 할 수 있다.

하지만 무기명은 이름이 없어서 프로세스간에 공유하는 방식이 다르다.

무기명의 경우에는 세마포어 세마포어 디스크립터를 공유영역에 할당함으로써 프로세스 및 쓰레드간에

사용할 수 있다.

 

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
: