当前位置:K88软件开发文章中心电脑基础基础应用04 → 文章内容

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

减小字体 增大字体 作者:华军  来源:不详  发布时间:2019-1-30 23:52:24

  多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。有什么方法可以避免多线程死锁的形成吗?请看下文。  一、死锁原因与形成条件:  死锁形成的原因:  1、系统资源不足;  2、进程(线程)推进的顺序不恰当;  3、资源分配不当。  从编程经验上来讲,形成死锁的一般原因有以下几种:  1、个人使用锁的经验差异。  2、程序模块使用锁的差异。  3、工程代码版本之间的差异。  4、工程代码分支之间的差异。  5、修改代码和重构代码带来的差异。  死锁形成的条件:  1、互斥条件:所谓互斥就是进程在某一时间内独占资源。  2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。  3、不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。  4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。  二、常见死锁形成的场景  死锁形成的常见情况有以下几种:  1、忘记释放锁:01void data_process()02{03EnterCriticalSection();04if(/* error happens, forget LeaveCriticalSection */)05return;06LeaveCriticalSection();07} 复制代码void data_process(){EnterCriticalSection();if(/* error happens, forget LeaveCriticalSection */)return;LeaveCriticalSection();}   以上就是避免多线程死锁的办法,希望可以帮到小伙伴们。

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