有一个关于操作系统的问题不知哪里问。进程等待的时候是否什么都不做?

Dan1980 2007-04-09 11:37:34
我现在学的一本操作系统教材上有一个例子:

有一个车辆监视和报告系统由两个进程组成,一个进程监视马路上的车辆,有车辆通过时,将某个变量的值增加1,另一个进程定期读取变量的值,打印出来,然后将变量清0。

由于变量为两个进程共享,所以两者要互斥地进入修改变量的代码区。假如报告进程正在打印,那么监视进程必须等待。

现在我的问题是:报告进程在打印的过程中,监视进程在等待,这时监视进程能做什么?是否什么都不做?如果这时有车辆通过,监视进程也不递增了,是不是?还是说,它可以把这些递增操作“积压”起来,到等待结束时一并执行?

请教!
...全文
252 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shelok 2007-04-09
  • 打赏
  • 举报
回复
while 有车辆通过 修改变量
sendmessageto 监视进程

监视进程getmessage
判断 变量是否为1
如果是 sendmessageto 打印进程
否则 不作处理

打印进程 接受监视进程发来的消息
判断变量是否为1
如果是 打印 并将变量置0

重复上一步
HewpKanXue 2007-04-09
  • 打赏
  • 举报
回复
按照我的理解,是这样:
每个线程都按照各自的正常流程运行,当到达临界区(或互斥锁)时。首先检测是否可进入。
如果是锁状态,
那么该线程就会在临界区边缘被挂起,等待下一次线程被调度再继续这一步。
所以当你的报告线程、被调度,且已经进入临界区时,监视线程应该是被挂起的。也可说处于等待状态,不会再去监视什么了。
也就是是说。报告线程从进入临界区,到退出临界区所用的时间,必须远远小于,一个车俩通过监视区所用的时间。否则就有可能漏检。(实际上,如果仅是读取一下数据,连毫秒级的时间估计都用不了,所以没什么可担心的。)
简而言之,临界区内的代码尽最大可能让他短些。
sirguan 2007-04-09
  • 打赏
  • 举报
回复
在实际应用中,监视进程肯定连接有摄像头,摄像头自己就有处理功能,肯定是时时刻刻在采集数据的,而在只有一个处理部件的cpu上,如果打印进程在进行,监视进程就处于暂停状态了,等到打印进程运行完毕,监视进程重新运行,读取摄像头累计的数据就可以了。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧