4.1 进程交互

进程竞争

**并发(concurrency)**是多个进程(或线程)同时执行的行为。当多个物理 CPU 可用时,进程可以并行执行。在单 CPU 上,可以通过分时来实现并发。

临界区是一个代码段,其当在其他进程正在执行相应的代码时,进程不能访问该代码段。

临界区的问题:

  1. 源代码指令x=x+c通过用CPU寄存器R,被编译成3个机器级别的指令
  2. 进程p执行指令x=x+1. 进程q执行指令x=x+2
  3. 如果x的初始值为0,p执行代码首先把0放入 Rp,将Rp加1,在重新储存回x。
  4. 如果q接下来执行,q把x值载入到Rq,将Rq加2,在重新储存回x。此时x的期望值为3。
  5. 上下文切换可以发生在p和q执行当中。首先p载入x的初始值到Rp。
  6. 接下来,q载入相同的初始值0到Rq。
  7. 然后,p将Rp加1,q将Rq加2。
  8. 最后,p将Rp=1储存回x中,但q又将x用Rq=2的值重写了x。p对x的更改就丢失了。进而最终的结果也是不对的。
  9. 源代码指令x=x+c对应的3条指令的顺序是临界区,不能交错。

临界区问题的软件解决方法

任何对于临界区问题的解决方法必须满足以下几点:

  1. 保证互斥(mutual exclusion):只能有一个进程在临界区可以执行。
  2. 防止锁死(lockout): 不尝试进入临界区的进程不能阻止其他进程进入临界区。
  3. 防止
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值