如何避免多线程死锁?多线程死锁的原因和幸免策略
时间:2023-02-27 08:43:20
在多线程编程过程中,不仅仅要解决数据访问的同步与互斥,还要注意多线程的死锁问题,而造成多线程死锁的原因大概可以归咎于系统资源不足、进程推进顺序不当或者资源分配不当等问题。有什么方法可以避免多线程死锁的形成吗?请看下文。
一、死锁原因与形成条件:
死锁形成的原因:
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();}
标签:线程死锁
0
投稿
猜你喜欢
Win7怎么连接XP共享的打印机?局域网打印机怎么设置共享?
2023-06-22 19:30:18
Word文档怎么调整字间距?Word文档调整字间距的方法教程
2022-11-26 14:35:07
Excel2003的数据筛选功能使用基础教程
2022-04-11 19:59:19
怎么恢复手机微信聊天记录?
2023-04-18 22:52:29
火绒怎么粉碎文件?文件粉碎方法简述
2022-07-07 00:00:58
查看U盘隐藏分区的方法步骤是什么?
2023-08-16 18:14:32
XP系统蓝屏提示Win32k.sys如何解决?
2023-11-17 09:16:25
Win10 语音助手小娜 换上了新版彩色天气图标
2022-01-23 09:16:53
Win7系统格式化U盘弹出提示“windows无法完成格式化”如何解决?
2022-06-05 05:24:39
Word2007中三维旋转图片的妙用
2023-03-22 17:41:50
如何固定excel表头的方法
2023-03-15 08:03:39
Win10系统窗口颜色怎么调?Win10系统窗口颜色调整教程
2023-03-07 15:58:06
如何设置Win8不同版本的背景图片
2023-07-14 23:31:35
Excel VBA如何根据姓名自动插入照片
2022-03-22 07:10:52
Mac启动快捷键功能汇总
2023-06-07 23:26:00
wps中的文本框应该如何设置为透明的?
2023-02-21 19:28:39
excel 工作簿的新建和保存实现教程
2022-12-17 15:22:36
在excel中如何使用pai
2023-11-21 23:40:32
WPS总是闪退是什么原因?WPS总是崩溃怎么处理解决方法教学
2023-10-04 16:08:13
excel中添加按钮的方法
2023-08-04 13:21:38