信号量的一些使用规则:
mutex:能否入场
mutex1:等待发卷/是否学生已到齐
mutex2:开始考试/监考
mutex3:考试结束/收卷/交卷
mutex4:能否离场/卷子收齐封装后离场
semaphore mutex,M1,M2,mutex1,mutex2,mutex3,mutex4;
mutex=1;M1=1;M2=1;mutex1=0;mutex2=0;mutex3=0;mutex4=1;
int StuCount =0;
int PaperCount=0;
student(){
P(mutex);
入场;
V(mutex);
P(M1);
StuCount++;
If(StuCount==N)
V(mutex1);
V(M1);
P(mutex2);
考试
交卷;
P(M2);
PaperCount++;
If(PaperCount==N)
V(mutex3);
V(M2);
P(mutex4);
离场;
V(mutex4);
}
void teacher(){
P(mutex);
入场;
V(mutex);
P(mutex1);
发卷;
for(i=1;i<=N;i++)
V(mutex2);
P(mutex3);
P(mutex4);
封装离场;
V(mutex4);
}
参考:http://blog.csdn.net/u012987386/article/details/72511569