关于操作系统进程
信号量的一些使用规则:
必须置一次且只能置一次初值
初值不能为负数
只能用于执行P、V操作
若s > 0,则s代表还可以使用的资源数
若s < 0,则s表示等待队列里的进程数
P操作代表请求一个资源
V操作代表释放一个资源
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.****.net/u012987386/article/details/72511569