但是这个队列可不是原来的磁带了, 它完全是个动态变化的东西,试运行还不到20秒, 冲突就出现了。 WPS气冲冲的来着打印机进程:"打印机, 你怎么搞的, 我的 放假通知.wps 为什么没有打印?“ WPS: “我明明放在了编号为3的槽里, 怎么可能没有了?”在操作系统老大的协助下, 大家查了半天,才知道是Word引起的:当时Word 插了一脚,也进来打印, 读到了in = 3, 就是说队列中编号为3的槽是空着的, 他把3这个值放到了自己的局部变量free_slot中, 这时候发生了一次时钟中断, 操作系统老大认为Word已经运行了足够长的时间,决定切换到WPS进程。 WPS也读到了in = 3, 把3 也存到自己的局部变量free_slot中, 现在Word, WPS都认为 下一个空的槽是 3 !WPS接着干活, 他把文件放到了第3号槽里, 并且把in 改为4, 然后离开了。接下来又轮到Word运行了, 它发现free_slot 为3 , 就把文件也放到了第3号槽里, 把free_slot 加1,得到4, 存入in 中。可怜的WPS , 他的文件被覆盖掉了。 但是打印机程序啥也察觉不出来, 照样打印不误。
![]()