컴퓨터 공부/Advanced UNIX System Programming

[5월 12일 1교시] 시스템V IPC - 세마포어

려리군 2009. 5. 12. 09:56

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;

};