학교수업
시스템 프로그래밍 - XSI 세마포어(P,V operation)
3년안에 내집 마련
2019. 6. 4. 01:51
반응형
- 시스템에서 생성된 세마포어는 semop나 semtimedop 함수를 이용해 P,V 오퍼레이션 가능
- P오퍼레이션 : 세마포어 감소
- V오퍼레이션 : 세마포어 증가
- P,V 오퍼레이션은 +-1이 아닌 +-n까지 가능
int semop(int semid, struct sembuf *sops, unsigned nsops); // (IPC_ID, 세마포어 작동 버퍼 구조체 주소, 버퍼 구조체 개수)
int timedop(int semid, struct semmbuf *sops, unsigned nsops, struct timespec *timeout);
- semop의 struct sembuf 구조체
struct sembuf{
unsigned short sem_num; // 세마포어 세트 내 개별 세마포어의 인덱스 번호, 0부터 시작
short sem_op; // 세마포어에 더할 값(0,양수, 음수)
shor sem_flg; // 작동 옵션플래그(sem_undo, IPC_NOWAIT)
}
- sem_flg 옵션 플래그
SEM_UNDO |
ㆍ세마포어 조작 프로세스 종료시 조작된 작업 취소대고 대기하던 다음 세마포어 OP 실행 ㆍSEM_UNDO 사용시 무한 대기 빠지는 것을 방지 -> 신뢰성 높여줌 ㆍ성능상 약간의 불이익 존재 |
IPC_NOWAIT |
사용 가능 자원 없을시 기다리지 않고 바로 에러 리턴 (리턴 에러 : EAGAIN) |
struct sembuf sem_buf[2];
ㆍㆍㆍㆍㆍㆍ생략ㆍㆍㆍㆍㆍㆍ
sem_buf[0].sem_num = 0;
sem_buf[0].sem_op = -1; //P operation(세마포어 감소)
sem_buf[0].semflg = SEM_UNDO;
sem_buf[1].sem_num = 4;
sem_buf[1].sem_op = 1; // V operation(세마포어 증가)
ㆍㆍㆍㆍㆍㆍ생략ㆍㆍㆍㆍㆍㆍ
if(semop(sem_id,sem_buf,2) == -1){
/*error*/
}
반응형