温故而知心 - 多线程死锁情况

死锁的必要条件

  • 互斥条件:一个资源每次只能被一个进程使用。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
    这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
    一不满足,就不会发生死锁。

死锁的简单例子

A Thread:

{
  Lock(Mutex_A);
  Lock(Mutex_B);
}

B Thread:

{
  Lock(Mutex_B);
  Lock(Mutex_A);
}

由于两次Lock之间并不是原子操作,故有几率的当A线程进入Lock(Mutex_A)的时候B线程恰好进入了Lock(Mutex_B),这时候产生了循环等待,就进入了死锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 接着上上节 thread ,本节主要介绍mutex的内容,练习代码地址。<mutex>:该头文件主要声明了与互斥量...
    jorion阅读 12,573评论 2 4
  • 接着上节 atomic,本节主要介绍condition_varible的内容,练习代码地址。本文参考http://...
    jorion阅读 8,540评论 0 7
  • 1、竞态条件: 定义:竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执行动作,从而导致...
    Hughman阅读 1,338评论 0 7
  • 我喜欢 翻开书时, 沁人心脾的墨香。 我喜欢 在夏日的清晨, 开在晨露中的花朵。 我喜欢 在细雨缠绵的雨天, 眺望远方。
    ayxuah阅读 95评论 0 0
  • 2016/12/5 今天是周一 在简书上看到PDCA,尝试一下,我计划了五件事情,1每天200字日子,2练琴30分...
    十一旧事阅读 399评论 0 0