米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

本科操作系统课练习2(和尚取水问题-信号量)

  • lxd01
  • 7
  • 2020-03-23 11:03

3 月,跳不动了?>>>

参考资料:

  1. https://zhidao.baidu.com/question/1836190443679119980.html
  2. https://blog.csdn.net/weixin_42664622/article/details/100899073

P操作和V操作的意思:

简单来说,P(S)表示S自减1,V(S)表示S自增1

具体而言

P操作顺序执行下述两个动作: ①信号量的值减1,即S=S-1; ②如果S≥0,则该进程继续执行; 如果S<0,则把该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直至其它进程在S上执行V操作,把它释放出来为止)。 V操作顺序执行下述两个动作: ①S值加1,即S=S+1; ②如果S>0,则该进程继续运行; 如果S≤0,则释放信号量队列上的第一个PCB(即信号量指量指针项所指向的PCB)所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。

和尚取水问题 某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚用水桶从井中提水入缸,老和尚用水桶从缸里取水饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个水桶取水。水桶总数为3个。每次入、取缸水仅为1桶,且不可以同时进行。试用P、V操作给出小和尚、老和尚动作的算法描述。

题目解析 n个小和尚从井里面提水进程之间互斥,用 mutex1 来表示; n个小和尚将水倒在缸里、n个老和尚从缸里面取水,这些进程互斥,用 mutex2 来表示; 不管是谁要使用水桶都要确认空闲水桶的数量,用 amount 来表示; 用 full 来表示水缸里面有几桶水,用 empty 来表示水缸里面还能放几桶水; 代码(伪) semaphore mutex1=1,mutex2=1; semaphore amount=3,empty=10,full=0;

void XiaoHeShangX()//X=1,2,3,,,n {     while(TRUE)     {         P(empty);         p(amount);         P(mutex1);         从井里打水;         V(mutex1);         P(mutex2);         往缸里面倒水;         V(mutex2);         V(amount);         V(full);      } }

void LaoHeShangX()//X=1,2,3,,,n {     while(TRUE)     {         P(full);         P(amount);         P(mutex2);         从缸里面取水使用;         V(mutex2);         V(amount);         V(empty);      } }

void mian() {     cobegin     XiaoHeShangX();//X=1,2,3,,,n     LaoHeShangX();//X=1,2,3,,,n     coend }



这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目人才招聘软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。

猜你喜欢

评论留言