进程间通信的竞争条件详解

一、竞争条件的含义

        竞争条件是由于协作的进程具有彼此都能够读写的共享存储区导致的,任何两个或多个进程读写某些共享数据,最后的结果取决于进程运行的时序,称为竞争条件。为了进一步了解竞争条件的含义,通过下面的两个案例来说明。

二、银行存取款

        假设你在银行有一个账户,账户余额为200元,在某一时刻,你决定去终端ATM取款,此时你登录ATM,读取到账户余额200元,然后点击取款功能,输入100元,此时由于你是按键操作,中间会有间隔,在你按下确定按键时,正好有另一个人正在给你网络转账,由于网络转账是通过发送转账信息到银行服务器,然后服务器更新你的存款余额,服务器读出你的存款余额也为200元,在这个时候你按下了取款按钮,然后取出100元,并且ATM之前读取到的账户余额200减去取出的100,账户余额应该为100元,然后ATM更新你的账户余额为100。而此时,另一个转账的进程也在更新你的账户余额,因为它之前读出的账户余额为200,现在加上转账进来的300,因此余额应该为500,然后更新你的账户余额为500。

        现在我们发现了,这两个操作所对应的进程,它们会给你的账户余额更新为不同的数目。如果进程A先更新你的账户余额,然后进程B再更新时,就会覆盖掉进程A更新的结果,此时你的账户余额就是500元。那么你就白白的赚了银行100元,如果更多的人发现这个漏洞,银行不就会跨了吗?哈哈!

       但是假如进程B先更新你的账户余额为500,然后进程A再更新你的账户余额为100,那么你最终的余额就是100,就会损失掉300!

       这种最后的结果依赖于进程运行的精确时序,就是竞争条件。所幸显示的银行系统意识到了这个问题,对存款余额这个变量设置为了临界区资源,同一时刻只允许一个进程访问,任何进程在访问存款余额时,都会给临界区上锁,直到它执行完,其他进程才能在来访问,因此现实之中,我们就不会出现上面的两种情况了。


三、假托机打印程序

          假脱机打印程序的工作过程是这样的:当一个进程需要打印某个文件时候,则将该文件名放在一个特殊的假脱机目录下。另一个进程(打印机守护程序)周期性的检查是否有文件需要打印,若有就打印并将该文件名从目录下删除掉。假设我们把假脱机的目录看

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值