死锁产生条件以及避免方式

死锁产生的四个条件:

  1. 资源互斥,同一时间内只有一个线程能访问这个共享资源
  2. 请求持有,此时一个线程已经持有了至少一个资源,并且又提出了新的资源请求,而新的资源已经被其他的请求占有,所以当前的线程已经被阻塞,并且阻塞以后不会释放当前已经持有的资源
  3. 不可剥夺条件,就是指线程获取到的资源在自己使用完成前,不会被其他线程抢占,只能自己使用完成后,由自己释放该资源
  4. 环路等待请求,指在发生死锁时,若干线程形成头尾相接的循环资源等待关系

解决方案:

  1. 互斥是没办法打破的,因为这就是我们使用锁的意义,就是为了互斥。
  2. 请求资源可以优化为一次请求所有的资源,避免互相等待。
  3. 打破不可剥夺条件,设置超时时间,已经持有资源的线程,如果长时间请求不到其他的资源,则释放当前持有的资源
  4. 环路加锁,注意加锁顺序,保证每个线程按照同样的顺序加锁
posted @   iiiiiiiivan  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示