过桥问题linux信号量课设,操作系统信号量问题——信号量的精简
是考研辅导书王道(操作系统)中关于信号量的一个题,个人觉得答案有精简的余地,所以讨论了一下,但是和王道高分牛校学长讨论的结果不满意,所以贴出来再探讨一下。
有一座桥,南北向,都有入口出口。(图我不画了)
1.假设该桥上每次只能有一辆车行驶,试用信号灯的P、V操作实现交通管理。
2.假设该桥上不允许两车交会,但允许同方向多个车一次通过(即桥上可有多个同方向行驶的车)。试用信号灯的P、V操作实现桥上交通管理。
课本参考“答案”:
int countSN=0;
int countNS=0;
semaphore mutexSN=1;
semaphore mutexNS=1;
semaphore bridge=1;
StoN(){
p(mutexSN);
if(countSN==0)
p(bridge);
countSN++;
V(mutexSN);
过桥;
p(mutexSN);
countSN--;
if(countSN==0)
V(bridge);
v(mutexSN);
}
NtoS(){
p(mutexNS);
if(countNS==0)
p(bridge);
countNS++;
V(mutexNS);
过桥;
p(mutexNS);
countNS--;
if(countNS==0)
V(bridge);
v(mutexNS);
}
首先肯定一下这个代码的实现,这个好处是可读性强,易于理解,坏处就是太臃肿,不够精简,对于无法玩转的人,他对这个事情的认识会浮于表面的文字标识。但是我想探讨的更精简,或者说是比较本质比较核心的部分:
我的疑问就是,答案中countSN和countNS,可不可以用一个count,一是试探其可行性,二是觉得用两个count臃肿。
我都强调了,bridge信号量可以实现互斥,count减到0才能换方向,不然一方一直霸占bridge信号量,当换方向时,count又是从0开始,可以满足另一方向的计数要求。如此往复。
网上某童鞋跟我说不可以,但是没有逻辑上的说服力。
对话如下:
我:
如题,看答案似乎有些臃肿,因为同时只能NtoS或者StoN,也就是说换方向时count都会是0,那么还有必要用countSN和countNS两个计数吗?还是我逻辑不好,遗漏了什么?主要是想知道这个,是不是我什么没考虑到。
哈工大高玩:
题目中说只能允许同时一个方向通车,这里使用两个计数器就是为了这里来考虑 ,如若使用一个,则会出现两个方向都有车辆通过的情况。
我:
如果是这样,那要bridge有什么用
哈工大高玩:
你还是没有理解我说的意思,brige是用来让两个方向同时只有一个再通车,但是假设像你说的那样,把countsn和countns都用一个count来表示,表面上看好像也是说的通,但是这里就有一个问题了,countsn和countns本来是用作对两个方向的车辆计数的,如果用一个,如何计数,计数不清楚,你怎么做到由南向北到要北向南通车的转变。其实我觉得这本身就需
要两个计数器来为两个方向计数,怎么能简化成一个呢。
我估计,他的想法无外乎几个角度,
一是说:他觉得我想的太简单,南和北count怎么能一样呢?那不就计算乱了,原来countSN和countNS分别代表南北方向的通车,如果不分用两个信号量,南北就无法互斥了~~~从字面来看,他确实是这样想的。
二是说:他认为那个countSN或者countNS本身就是那些过桥的车辆了,而我想的是,这两个只是信号量而已,区别过桥的到底是南到北还是北到南,其实是StoN()和NtoS()方法来决定的,countSN和countNS本身没有任何意义,不能代表南北方向的实际车辆,其实质只是一个计数工具,
这个工具是干什么的,很显然,是为了帮助控制bridge信号量的,根据count来完成两个if语句,占有bridge和释放bridge,既然bridge信号量只能等到count==0才能转变给另一个进程,那么两个进程就是互斥的,count不可能同时为两边计数,也就是说可以用来重复利 用,这是我的想法,我认为逻辑上现在还找不出问题。
反正觉得他的想法对~!因为我无法理解我错在哪了,请不要说是可读性的问题。。。
是人的沟通障碍还是立场差异太大,不做太多吐槽,如果是我错了也好,希望有导师指正,帮我进步。
过桥问题linux信号量课设,操作系统信号量问题——信号量的精简相关推荐
- 操作系统课设之基于信号量机制的并发程序设计
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设--使用信号量解决生产者/消费者同步问题
山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...
- 操作系统课设之Linux 进程间通信
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之Linux 进程管理
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之简单 shell 命令行解释器的设计与实现
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之虚拟内存页面置换算法的模拟与实现
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之内存管理
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之Windows 的互斥与同步
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- 操作系统课设之Windows 进程管理
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
最新文章
- 《Java: The Complete Reference》等书读书笔记
- 浩方平台CS流量评估
- 设置计算机在睡眠状态下能共享,使用wifi共享精灵的过程中电脑会自动休眠锁屏的解决方法...
- python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战
- memset与malloc性能测试(转)
- yii2.0验签组件(jwt)
- Java跳出多重循环
- 解决TeXstudio外部查看器失败方法
- 修改Sql Server 2000数据库名称
- 桌面云的四大协议解析
- pytorch---nn模块(3)自定义nn 模块
- 推荐一款焦点图jQuery插件 SlidesJs
- 雷电模拟器 手机模拟器 安装 连接
- 应用商店优化(ASO)之关键词及描述优化
- SPSS进行问卷量表信度检验【SPSS 082期】
- 计算机控制点火系统的三个阶段,汽车发动机电控技期末考解答.doc
- jpress连接不上mysql_JPress安装部署超详细文档
- MySQL高手篇:精妙SQL语句介绍
- 电脑突然关机重启是什么原因?
- typescript关键词Parameters和ReturnType