关于操作系统进程

信号量的一些使用规则:

必须置一次且只能置一次初值
初值不能为负数
只能用于执行 P V 操作
s > 0 s 代表还可以使用的资源数
s < 0 ,则 s 表示等待队列里的进程数
P 操作代表请求一个资源
V 操作代表释放一个资源


mutex:能否入场

mutex1:等待发卷/是否学生已到齐

mutex2:开始考试/监考

mutex3:考试结束/收卷/交卷

mutex4:能否离场/卷子收齐封装后离场

扫描二维码关注公众号,回复: 11710355 查看本文章

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


猜你喜欢

转载自blog.csdn.net/mukami0621/article/details/78702828