栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Windows

如何避免多线程死锁?多线程死锁的原因和幸免策略

Windows 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何避免多线程死锁?多线程死锁的原因和幸免策略

  在多线程编程过程中,不仅仅要解决数据访问的同步与互斥,还要注意多线程的死锁问题,而造成多线程死锁的原因大概可以归咎于系统资源不足、进程推进顺序不当或者资源分配不当等问题。有什么方法可以避免多线程死锁的形成吗?请看下文。

  一、死锁原因与形成条件:

  死锁形成的原因:

  1、系统资源不足;

  2、进程(线程)推进的顺序不恰当;

  3、资源分配不当。

  从编程经验上来讲,形成死锁的一般原因有以下几种:

  1、个人使用锁的经验差异。

  2、程序模块使用锁的差异。

  3、工程代码版本之间的差异。

  4、工程代码分支之间的差异。

  5、修改代码和重构代码带来的差异。

  死锁形成的条件:

  1、互斥条件:所谓互斥就是进程在某一时间内独占资源。

  2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

  3、不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。

  4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

  二、常见死锁形成的场景

  死锁形成的常见情况有以下几种:

  1、忘记释放锁:

  1. 01void data_process()
  2. 02{
  3. 03EnterCriticalSection();
  4. 04if()
  5. 05return;
  6. 06LeaveCriticalSection();
  7. 07}
复制代码 void data_process() { EnterCriticalSection(); if() return; LeaveCriticalSection(); }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/563389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号