设置一个num同步信号量,用于控制桥上的人数,初始值为2,表示桥上最多有2个人

南侧s、北侧n桥各设置一个互斥信号量,初始值为1,表示只允许一个人通过南侧桥或北侧桥

同步信号量起”通知“的作用,互斥信号量起“锁”的作用


int num = 2 ;
int south = 1;
int north = 1;//南侧的人过桥
void toNorth(){p(num)//发信号过桥,查看当前桥上是否还可上人,桥上人容量减1(因为桥上人数加1了)p(south)//锁南桥过南侧桥到中间v(south)//解锁南桥,后面的人可以接着过p(north)//锁北桥过北侧桥v(north)//解锁北桥,后面的人可以接着过v(num)//人过了桥,桥容量加1}
//北侧的人过桥
void toSouth(){p(num)//发信号过桥,查看当前桥上是否还可上人,桥上人容量减1(因为桥上人数加1了)p(north)//锁北桥过北侧桥到中间v(north)//解锁北桥,后面的人可以接着过p(south)//锁南桥过南侧桥v(south)//解锁南桥v(num)//人过了桥,桥容量加1
}

为什么互斥信号量【p(south)】不能在同步信号量【p(num)】之前?也就是先锁桥,再说我要过桥

如果此时桥人数已达上限,中间有两个人,而两岸边的人还可以先把桥锁上,再说要过桥(即使发现锁完之后桥的容量已达上限被阻塞了),就出现中间的人想往两边过,结果过不去,等待岸上的人解锁,两岸的人将桥上锁也上不去桥,因为桥的容量达到上限   所以实现互斥的操作要在实现同步的操作之后

void south bridge(){
p(south)p(num)
过南
v(south)
到中
p(north)
过北
v(north)v(num)}void north bridge(){
p(north)p(num)
过北
v(north)
到中
p(south)
过南
v(south)v(num)}

参考链接:https://blog.csdn.net/qq_40851744/article/details/103793153

一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一方向只允许一个人过桥,南侧桥段和北侧桥段较窄只能通过一个人,桥中央一处宽敞,允许两个人通过或歇息。试用P(wait)V(signal)操作实现相关推荐

  1. C语言 编写程序:请将Fibonacci数列前30项中的偶数值找出来,存储到一维数组中。其中,Fibonacci数列如下:1,1,2,3,5,8,13,21,34...该数列除前两项之外,其他任意

    编写程序:请将Fibonacci数列前30项中的偶数值找出来,存储到一维数组中.其中,Fibonacci数列如下:1,1,2,3,5,8,13,21,34-该数列除前两项之外,其他任意一项都是相邻的前 ...

  2. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法

    设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类.长方形类.正方形类.三角形类来继承图形类,并实现上述两个方法 设计抽象类 就要使用abstract关键字,抽象类中的 ...

  3. 零障碍合并两个模型,大型ResNet模型线性连接只需几秒,神经网络启发性新研究...

    点击上方"迈微AI研习社",选择"星标★"公众号 重磅干货,第一时间送达 来源:机器之心 这篇论文探讨了置换对称性(permutation symmetry)如 ...

  4. 桌上有一空盘,最多允许存放一个水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。

    问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步. 问题分析及思路: 本题 ...

  5. 有一座岛,有两个部落,甲部落的女的只穿白裙子,乙部落的女的只穿黑裙子。现在岛上来了三个穿黑裙子的女的,下列哪项比较符合逻辑:

    A 这三个女的是甲部落的 B 这三个女的是乙部落的 C 这三个女的不是这个岛的 D 这三个女的是这个岛的 E 这三个女的可能是乙岛的

  6. win10突然只剩下c盘和d盘了_电脑C盘爆满飘红?系统卡?试试这两种解决办法

    编辑:晴晨 很多朋友在使用电脑时有一种习惯,就是将各种文件放到桌面,其中视频类.图纸类文件占用空间最多,比如下载个高清电影,随随便便都是几个G起步,好一点的片源可能要十几个G,所以再多的C盘空间也不够 ...

  7. c++ 11 锁_双11好物推荐,这两款好用又实惠的智能锁只需几百块-新闻频道

    随着智能设备种类的增多和安全性的提高,智能锁近两年来正加速推广普及的步伐,越来越多人认可并选择智能锁.一年一度的双11购物节已拉开帷幕,不少朋友计划在这个时候选购好用又实惠的产品,那么对于智能锁产品, ...

  8. 弹性碰撞后速度方向_两物体发生弹性碰撞后.相对速度大小不变.方向相反. ,也可以说两物体的速度之和保持不变.即 ....

    (1)(5分)2011年3月日本发生9级大地震,并引发海啸.位于日本东部沿海的福岛核电站部分机组发生爆炸,在日本核电站周围检测到的放射性物质碘131.在核泄漏中,碘的放射性同位素碘131(半衰期为8. ...

  9. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

    ·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...

最新文章

  1. .net ConfigurationSectionDesigner插件使用
  2. GSM协议编号及其内容
  3. Response.Redirect() 跳转中的ThreadAbortException
  4. python爬虫正则表达式实例-Python爬虫(十一)_案例:使用正则表达式的爬虫
  5. 转:Firebird 数据访问组件 (Delphi)
  6. 高压断路器故障诊断的相关方法
  7. PHP笔记-连接MySQL数据库及查询数据
  8. Python3之对象垃圾收集机制浅析
  9. 《Java虚拟机原理图解》1.1、class文件基本组织结构
  10. Java数据结构和算法---程序员常用10种算法
  11. 2021-10-24
  12. android 手机 打印 图片,Mopria打印PDF、TXT文档或图片(适用于Android安卓系统)
  13. 7-4 华氏度转摄氏度 (5分) java
  14. python 文件格式转换_如何把txt文件转换成py文件
  15. matlab 对话框大小调整,matlab界面设计---对话框设计
  16. 如何使用Python从视频中提取图像?(帧提取)详细代码实现
  17. 微信小程序自定义picker
  18. 已知三角形的三条边长,求这个三角形的外接圆的半径
  19. access 套用表格_Word表格编辑技巧:在Word中使用Access的数据-word技巧-电脑技巧收藏家...
  20. postman获取返回值及tests[]用法

热门文章

  1. 【Verilog闯关第2天】数字秒表的设计
  2. 利用unicode字符rlo
  3. Android Studio Chipmunk 发布
  4. message:Error app.json app.json 未找到 public
  5. 方舟服务器自动维护,明日方舟剿灭关卡积水潮窟地图分析 干员选择与站位推荐[多图]...
  6. 中国所有省、直辖市、自治区及其简称
  7. flex LCDS 整合 java 增删改查
  8. $.ajax({});的各个参数的理解
  9. HTML5 form表单 调查问卷制作
  10. 【无标题】6. 青蛙与蚊子