进程间通信(IPC: inter process Communication)

问题

  1. 一个进程如何把信息传递给另一个。
  2. 确保两个或更多的进程在关键活动中不会出现交叉。
  3. 保证正确的顺序。

定义

竞态条件:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,称为竞态条件。

临界区:把对共享内存进行访问的程序片段称为临界区域或者临界区。

忙等待的互斥(屏蔽中断,锁变量,严格轮转法,Peterson解法,TSL指令)
睡眠与唤醒(生产者-消费者问题)
信号量
互斥量
管程
消息传递
屏障

死锁

死锁的产生需要一定条件:要有一个或多个执行线程和一个或多个资源,每个线程都在等待其中的一个资源,但所有的资源都已经被占用了。所有线程都在相互等待,但他们永远不会释放已经占有的资源。于是任何线程都无法 继续,这便意味着死锁的产生。
一个很好的死锁例子是四路交通堵塞问题。如果每一个停止的车都决心等待其他的车开动后自己再启动,那么久没有任何一辆车能启动,于是就造成了交通死锁的发生。
预防死锁的发生非常重要,虽然很难证明代码不会发生死锁,但是可以写出避免死锁的代码,一些简单的规则对避免死锁大有帮助:

  1. 按顺序加锁。使用嵌套的锁时必须保证以相同的顺序获得锁,这样可以阻止致命拥抱类型的死锁,最好能记录下锁的顺序,以便其他人也能找此顺序使用。
  2. 防止发生饥饿。试问,这个代码的执行是否一定会结束?如果A不发生,不会一直等待下去吗?
  3. 不要重复请求同一个锁。
  4. 设计应力求简单–越复杂的加锁方案越有可能造成死锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值