Semaphore
자원을 기록하는 세마포어 변수. P(wait)와 V(signal)연산으로 동기화
P연산 :
if(sem>0)
sem = sem-1
else{
sem>0이 될때까지 기다림.
sem = sem-1
}
V연산 :
sem = sem+1
기다리는 프로세스를 깨운다.
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
int semget(in:key_t key, in:int nsems, in:int semflag);
key값과 관련된 세마포어 집합 식별자를 리턴.
key : 키값
nsems : 원하는 세마포어 집합. (키가 IPC_PRIVATE를 가지거나 키와 관련된 세마포어 집합이 없을 때 만들어진다.)
semflg : IPC_CREAT, IPC_EXCL
int semop(in:int semid, in:struct sembuf *opsptr, in:unsigned int nops)
semid에 대하여 opsptr로 지정된 명령어들을 수행한다.
semid : 집합에서 선택된 연산을 수행할 세마포어 아이디.
opsptr : 하나의 세마포어에서 수행될 연산을 표현하는 배열 포인터
nsops : 명령의 개수.
int semctl(in:int semid, in:int semnum, in:int cmd, in:union semun *arg);
세마포어 채널의 정보를 제어한다.
semnum번째 semid의 세마포어 집합을 cmd에 해당하는 연산을 수행한다.
cmd에 따라 arg를 정의해 주어야 한다.
union semun{
int val;
struct semid_ds *buff;
ushort *array;
};
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[5월 12일 3교시] 시험 문제 (0) | 2009.05.12 |
---|---|
[5월 12일 2교시] 시스템V IPC - 공유메모리, 쓰레드 (0) | 2009.05.12 |
[5월 11일 2교시] 시스템V IPC - 메세지큐 (0) | 2009.05.11 |
[5월 11일 1교시] FIFO (0) | 2009.05.11 |
[5월 8일 3교시] IPC (0) | 2009.05.08 |