'System Program/semaphore'에 해당되는 글 2건

  1. 2014.03.10 무기명 세마포어
  2. 2014.03.10 기명 세마포어 함수

무기명 세마포어

System Program/semaphore 2014. 3. 10. 16:18

1. 무기명 세마포어

 

무기명 세마포어는 응용프로그램이 할당한 메모리에 저장된 sem_t형의 변수다.

세마포어는 프로세스나 쓰레드가 공유하는 메모리 영역에 위치함으로써 사용하는 프로세스나 쓰레드에

가용하도록 만들어진다.

 

무기명 세마포어는 세마포어를 감소, 증가 및 현재값 등을 얻어오는 함수들은 앞의 기명 세마포어와

동일하게 사용하고 무기명 세마포어를 초기화하고 종료하는 함수만 다르다.

 

2. 무기명 세마포어 초기화

 

세마포어를 초기화하고 프로세스간에 또는 쓰레드간에 공유되는지 여부를 시스템에 알린다.

 

#include <semaphore.h>

 

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

 

성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴

 

초기화 함수에서 pshared가 '0'이면 프로세스내의 쓰레드간에 공유를 의미하며

'0'이 아니면 큰 값은 프로세스간의 공유를 의미한다.

하지만 어디까지나 pshared 설정에 따른 동작은 시스템 의존적이며 단지 호환성을 맞추기위해 위에 기술한 것처럼

프로그램을 작성하는 것이 맞다.

 

3. 세마포어 종료

 

#include <semaphore.h>

 

int sem_destroy(sem_t *sem);

 

성공하면 '0'을 리턴하고, 에러가 발생하면 '-1'을 리턴

 

 

 

 

'System Program > semaphore' 카테고리의 다른 글

기명 세마포어 함수  (0) 2014.03.10
:

기명 세마포어 함수

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
: