操作系统PV操作题

文章通过三个示例展示了如何使用P、V操作解决并发控制问题。第一个例子是两队人渡船,要求按特定组合过河;第二个例子涉及自行车在南开大学和天津大学之间的单向小路错车;第三个例子是小和尚和老和尚取水入缸的问题,需要协调取水和存水的过程。每个问题都通过信号量机制确保了资源的正确访问和同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目一:两队渡船

一艘船每次可渡4人过河,有红黑两队人过河,要求只允许红、黑各4人或红2人、黑2人一起方可渡河,请使用P、V操作来实现

前期准备:

  • 信号量准备:共设有两个信号量,其中mutex表示上船信号量,s表示渡船信号量
  • 全局变量准备:红黑队准备渡船人数分别用 x,y表示
  • 红队:当红队人数=2且黑队人数>=2或红队人数=4时满足渡船条件,此时暂停上船等待渡船
  • 黑队:与红队一样
  • 注意:上船方式有三种,对应不同的代码,编写的时候要分类讨论,不能仅用“渡船”一概而论

代码编写:

Semaphore mutex, s; //上船,渡河
mutex.value = 1, s.value = 0;
cobegin
	process 红队(){
   
   
		while(1){
   
   
			P(mutex);
		    x++;
			if((x == 2 && y >= 2) or x == 4){
   
     //这里不是(x == 2 && y == 2)是因为:
		                     	              //y>=2时也能满足红黑两队各两人的情况,只要在渡船的时候黑队减去多余的人即可
				V(s);  //满足渡船需求
				goto L1; //goto L1是为了跳过V(mutex)操作,表明上船操作停止
			}
			V(mutex); //继续上船
			L1:  ;
		}
	}
	process 黑队(){
   
   
		while(){
   
   
			P(mutex);
			y++;
			if(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值