본문내용
t sembuf p_buf; // 세마포어의 변수부분(미리 만들어져있음)
if(flag==1) { // 누가 접근했는지를 'flag'를 통해서 알수있다.
printf("Product.. Wait for Critical Section Entering\n");
}
else {
printf("Customer.. Wait for Critical Section Entering\n");
}
p_buf.sem_num = 0; // 값을 초기화
p_buf.sem_op = -1; // 'p()'는 값을 '1'씩 감소하기에
p_buf.sem_flg = SEM_UNDO; // 수행도중 프로그램에 에러가 생길때
// 이를 복구해서 예전상태로 만들어줌
if(semop(semid, &p_buf, 1)==-1) { // 세마포어 연산
perror("p(semid)");
return -1;
}
return -1;
}
int v(int semid, int flag) { // 'p()'와 동일
struct sembuf v_buf;
if(flag==1) {
printf("Product.. Critical Section Leaved\n");
}
else {
printf("Customer.. Critical Section Leaved\n");
}
v_buf.sem_num = 0;
v_buf.sem_op = 1; // 'v()'는 값을 '1'씩 증가시키기에
v_buf.sem_flg = SEM_UNDO;
if(semop(semid, &v_buf, 1)==-1) {
perror("v(semid)");
return -1;
}
return 0;
}
if(flag==1) { // 누가 접근했는지를 'flag'를 통해서 알수있다.
printf("Product.. Wait for Critical Section Entering\n");
}
else {
printf("Customer.. Wait for Critical Section Entering\n");
}
p_buf.sem_num = 0; // 값을 초기화
p_buf.sem_op = -1; // 'p()'는 값을 '1'씩 감소하기에
p_buf.sem_flg = SEM_UNDO; // 수행도중 프로그램에 에러가 생길때
// 이를 복구해서 예전상태로 만들어줌
if(semop(semid, &p_buf, 1)==-1) { // 세마포어 연산
perror("p(semid)");
return -1;
}
return -1;
}
int v(int semid, int flag) { // 'p()'와 동일
struct sembuf v_buf;
if(flag==1) {
printf("Product.. Critical Section Leaved\n");
}
else {
printf("Customer.. Critical Section Leaved\n");
}
v_buf.sem_num = 0;
v_buf.sem_op = 1; // 'v()'는 값을 '1'씩 증가시키기에
v_buf.sem_flg = SEM_UNDO;
if(semop(semid, &v_buf, 1)==-1) {
perror("v(semid)");
return -1;
}
return 0;
}
소개글