注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

线程互斥的问题  

2012-11-29 20:36:06|  分类: 基本知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

线程互斥的问题
这两天在公司定位程序假死的问题,由于使用的是ACE库,所以认真得看了看,结果发现了些问题,在ACE线程的切换时,虽然使用了并发控制,但并发控制做的并不严谨,很有可能造成线程在切换时,引起数据的锁死或者数据库表的锁死。找到可能的现象后,就进行实验。
试验进行了三次,每次进行了三到五次不等的测试,结果基本证实了怀疑:
1、大数据量催促线程轮转,程序立刻挂掉。
2、去掉数据处理线程,但仍然接收,运行二十分钟左右程序正常。
3、继续打开数据理线程,程序立刻挂掉,但同时立刻停止大数据量发送。过大约半小时后,程序自动又开始处理。
这样,特别是最后一次的测试,偶然证实是线程切换死锁的问题。

看来,线程切换时,一定要注意,要把握好死锁。
其实这次问题有两个方面,一个是在上层数据库访问前做了互斥处理,但如果线程挂掉,退不出互斥,那么另外一个便再也无法工作了。另外一个是数据表上的事物,如果数据处理线程事物正在处理时候,线程被强行切换走,同样会把数据死锁。
这里有一个前提就是另外一个程序一旦拿到运行权后,会立刻把当前线程suspend。从而造成两个线程死锁。
还是那句话,写程序,要认真,细心。

  评论这张
 
阅读(470)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017