유닉스 세마포어 + read, write 순서 질문
#include "share_ex.h"
#include "share_ex.h"
/* 이들은 두 세마포를 위해 p와 v를 정의한다. */
struct sembuf p1 = {0, -1, 0}, p2 = {1, -1, 0}; /* semaphore 0과 1의 초기값은 모두 0 */
struct sembuf v1 = {0, 1, 0}, v2 = {1, 1, 0};
/* 간략한 표현을 위하여
P1 = semop(semid, &p1, 1), P2 = semop(semid, &p2, 1), V1 = semop(semid, &v1, 1), V2 = semop(semid, &v2, 1),
R1 = write (1, buf1->d_buf, buf1->d_nread); R2 = write (1, buf2->d_buf, buf2->d_nread);
W1 = read(0, buf1->d_buf, buf1->d_nread); W2 = read(0, buf2->d_buf, buf2->d_nread);
*/
void bufferWriter (int semid, struct databuf *buf1, struct databuf *buf2){
for(;;){ W1; V1; P2; W2; V1; P2; }
}
void bufferReader (int semid, struct databuf *buf1, struct databuf *buf2){
for(;;){ P1; V2; R1; P1; V2; R2; }
}
가. bufferWriter 와 bufferReader의 semaphore 의 실행 순서를 다음과 같이 바꾸었을 때 위 코드와 같은 실행 결과가 되는 것을 모두 고르시오. (5점) - B , C
A bufferWriter: W1; P2;V1; W2; P2;V1; bufferReader: P1;V2; R1; P1;V2; R2;
B bufferWriter: W1; P2;V1; W2; P2;V1; bufferReader: V2;P1; R1; V2;P1; R2;
C bufferWriter: W1; V1;P2; W2; P2;V1; bufferReader: P1;V2; R1; V2;P1; R2;
D bufferWriter: P2;V1; W1; P2;V1; W2; bufferReader: V2;P1; R1; V2;P1; R2;
여기서 왜 b,c만 되는지 모르겠습니다.
p1은 v1실행 이후면 되고
p2도 v2실행 이후면 되는걸로 알고있는데
a,d는 왜 다른 결과인가요?
댓글 달기