永发信息网

如何避免爆胎,谁知道C++项目如何避免线程死锁

答案:1  悬赏:0  手机版
解决时间 2021-05-06 02:39
如何避免爆胎,谁知道C++项目如何避免线程死锁
最佳答案
突然之间,觉得无法回答.在我写过的程序当中,似乎还没有发生过单纯的死锁问题.自己也写了不少多线程程序了,复杂一点的,超过10个以上的线程互相纠缠,为什么一直没有出现死锁呢?一定是我的的某些行为,能够有效的避免死锁,把他们找出来,将是有价值的.于是,我把最近写的一些项目代码翻出来,仔细的检查了一遍.
多线程发生死锁,无非是占着碗里的,看着锅里的,如能避免这一点,自然就不会发生死锁.然而显示世界并非如此简单.还是从最近的项目谈起吧.
第一,最近的项目使用了boost.thread作为线程库,个人认为这时非常好的库,或许不够强大,但是正是这种不够强大,却使得代码更为健壮.结合boost.bind,创建线程变得简单而直接,杜绝了线程异常退出和创建线程过程中可能出现的资源泄漏.通过bind,我们可以方便的运用RAII,而不必费心思考虑资源拥有权的转移问题.唯一需要注意的就是:线程执行单元依赖的对象生存期一定要比线程还长.在前一个项目中我们没有能够实现一种机制来保证这一点,并且,在这个问题上我们确实发生过一次关联到这个问题上的隐蔽的错误.
结论:选择一个可靠的线程库是非常重要的.
结论:必须通过RAII来操纵锁.
第三,从未直接操纵存在竞争的原始资源,对于竞争的资源,全部提供了非竞争的接口,这是通过一个间接层来实现的.增加了一个访问资源的间接层,尽量避免高层代码控制资源的获取.另外,因为为每个资源类型实现间接层,避免了一个锁控制访问多个资源的情况.对于需要获取多个资源的,在更高一层把这种获取逻辑抽取出来,提供一个统一的资源获取逻辑,而在实现内部,确保有序获取资源,在算法上避免死锁.
结论:为资源的竞争访问提供抽象,并屏蔽细节.我想,坚持这三点,应该可以避免绝大多数的线程死锁问题了.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
话说三国谁的武艺排第二?是张飞还是关羽?
整个火车有多少个轮子?
一个人要怎么样能耐得住“寂寞”二字、
范甘迪刚刚恢复飞过海
超级QQ的24小时在线``如果我QQ2年不上``QQ等
U盘插到USB接口灯亮但无法读取怎么办?
倪红灯工作原理、
IE8一打开有插件网页就崩溃 。比如nba中文网
金地市场在什么地方啊,我要过去处理事情
泡沫之夏中 大S唱的钻石 MP3格式
为什么山地车轮胎宽 大赛轮胎窄
如何点亮qq爱墙的图标
为台式机升级内存,请问DDR400和DDRⅡ800能兼
弄在白色衣服上的血渍怎样洗掉
找人送我一个QQ爱墙图标
推荐资讯
知味来面馆我想知道这个在什么地方
劲舞团为什么一按广东区窗口出来的时候就老服
尿道微创手术会留下后遗症吗?
变形计主角描述台词,怎样提高早餐面食花样
暧昧有关的诗词,最享受的就躺在床上听音乐的
巴金有关真话的名句,表现沟通凝聚力量的诗词
惠天热电股份有限公司棋盘山供热公司地址有知
人死了以后将会是怎么样的呢、、、
橄榄有什么作用?
windows 7无法通过集线器自动连接上网的问题.
谁要QQ音速种子谁有?
老苏州羊肉馆地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?