大学男女洗澡问题讨论.pptVIP

  • 26
  • 0
  • 约2.65千字
  • 约 12页
  • 2020-05-08 发布于河北
  • 举报
大学男女洗澡问题 第四小组 问题描述  假设一个大学为了卖弄其政治上的正确性,准备把美国最高法院的信条“平等但隔离其本身就是不平等”运用在种族上也运用在性别上,从而结束校园内长期使用的浴室按性别隔离的做法。但是,为了迁就传统习惯,学校颁布法令:当有一个女生在浴室里,那么其他女生可以进入,但是男生不行。反之亦然。在每个浴室的门上有一个滑动指示符,表示当前处于以下的三种可能状态之一: 空   有女生    有男生 用你偏好的编写伪代码(女生进入,男生进入,女生离开,男生离开)请用P.V操作 PV操作 PV操作及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用共享资源的进程数。   P操作申请资源:(1)S减1;(2)若S减1后仍大于等于零,则进程继续执行;(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转入进程调度。    V操作 释放资源:(1)S加1;(2)若相加结果大于零,则进程继续执行;(3)若相加结果小于等于零,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。 问题分析(流程图) 设计思路(以男生为例) 一、当一个男生想进入澡堂的时候,他要判断: ①澡堂是不是满了 P(empty) ②澡堂里有没有女生 P(g) 如果满了,或者有女生,那么P操作就会调用阻塞原语来阻塞男生进程,其结果表现为男生必须等待 其中,g是根据女生人数生成的一个信号量。 二、如果男生可以进入澡堂,即P(empty)和P(g)均未阻塞 //男生进入澡堂 boynum++; 三、进入澡堂之后,调用V(mutex)释放资源,来允许其他人进入 四、//洗澡,离开 boynum--; 五、如果最后一个男生洗完澡之后,就通知正在等待的女生进入(如果有的话)(进程通信) if(boynum==0) V(b); 六、释放澡堂资源 设计要点和关键技术 线程的同步与互斥 信号量上的P、V操作算法 使用JAVA开发平台 伪代码 int boynum=0; //表示澡堂中男生人数,初始值为0 int girlnum=0; //表示澡堂中女生人数,初始值为0 boolean b=1; //表示澡堂中是否有男生,b=1表示没有男生,b=0表示有男生 boolean g=1; //表示澡堂中是否有女生,g=1表示没有女生,g=0表示有女生 int empty=n; //表示澡堂的容量,最多能容纳多少人,表示空位置的个数 boolean mutex=1; //互斥信号量 boy(){ //男生进程 P(mutex); //控制男女生不能同时进入澡堂 p(empty); //进入条件一:澡堂满时不能进入 g=have(girlnum); //当girlnum0时(有女生),返回0;当girlnum=0时(没女生),返回1 P(g); //进入条件二:有女生时不能进入 //男生进入澡堂 boynum++; V(mutex); //放在这个位置是为了避免澡堂只被一个人占用的情况 //洗澡,离开 boynum--; if(boynum==0) V(b); //最后一个男生离开澡堂后,即boynum=0,就通知女生进入(唤醒正在等待的女生进程) V(empty); } girl(){ //女生进程 P(mutex); P(empty); b=have(boynum); P(b); //女生进入澡堂 girlnum++; V(mutex); //洗澡,离开 girlnum--; if(girlnum==0) V(g); V(empty); } boolean have(int num){ if(num0)

文档评论(0)

1亿VIP精品文档

相关文档