竞争条件(racecondition)

更新时间:2023-07-03 00:36:22 阅读: 评论:0

竞争条件(racecondition)
在⼀些中,协作的进程可能共享⼀些彼此都能读写的公⽤存储区。这个公⽤存储区可能在内存中(可能是在内核中),也可能是⼀个共享⽂件。这⾥共享存储区的位置并不影响通信的本质及其带来的问题。为了理解实际中进程间通信如何⼯作,我们考虑⼀个简单但很普遍的例⼦:⼀个假脱机打印程序。当⼀个进程需要打印⼀个⽂件时,它将⽂件名放在⼀个特殊的假脱机⽬录(spooler directory)下。另⼀个进程(打印机守护进程)则周期性地检查是否有⽂件需要打印,若有就打印并将该⽂件名从⽬录下删掉。
defects>pastdue
function设想假脱机⽬录中有许多槽位,编号依次为0,1,2,…,每个槽位存放⼀个⽂件名。同时假设有两个共享变量:out,指向下⼀个要打印的⽂件;in,指向⽬录中下⼀个空闲槽位。可以把这两个变量保存在⼀个所有进程都能访问的⽂件中,该⽂件的长度为两个字。在某⼀时刻,0号⾄3号槽位空(其中的⽂件已经打印完毕),4号⾄6号槽位被占⽤(其中存有排好队列的要打印的⽂件名)。⼏乎在同⼀时刻,进程A和进程B都决定将⼀个⽂件排队打印,这种情况如图2-21所⽰。
英汉辞典在Murphy法则(任何可能出错的地⽅终将出错)⽣效时,可能发⽣以下的情况。进程A读到in的值为7,将7存在⼀个局部变量next_free_slot中。此时发⽣⼀次时钟中断,CPU认为进程A已运⾏了⾜够长的时间,决定切换到进程B。进程B也读取in,同样得到值为7,于是将7存在B的局部变量next_free_slot中。在这⼀时刻两个进程都认为下⼀个可⽤槽位是7。
西安培训学校>pau什么意思
shm进程B现在继续运⾏,它将其⽂件名存在槽位7中并将in的值更新为8。然后它离开,继续执⾏其他操作。
scenery
最后进程A接着从上次中断的地⽅再次运⾏。它检查变量next_free_slot,发现其值为7,于是将打印⽂件名存⼊7号槽位,这样就把进程B存在那⾥的⽂件名覆盖掉。然后它将next_free_slot加1,得到值为8,就将8存到in中。此时,假脱机⽬录内部是⼀致的,所以打印机守护进程发现不了任何错误,但进程B却永远得不到任何打印输出。类似这样的情况,即两个或多个进程读写某些共享数据,⽽最后的结果取决于进程运⾏的精确时序,称为竞争条件(race condition)
how to learn english 作文>童装设计图

本文发布于:2023-07-03 00:36:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1075114.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   打印   可能   共享   槽位
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图