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

mie

 
 
 

日志

 
 

线程死锁问题  

2010-09-23 17:04:10|  分类: Windows开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        线程A和B。A查询,判断B线程是否存在,如果存在,等待B线程退出。再创建B,B执行。B执行过程中,向A发送消息,并等待A反馈,然后继续执行。

        没有想到会死锁,而且是多处死锁!

        (1)死锁一:A等待B退出。这可能导致无限等待!因为B可能正在等待A线程响应消息,而A刚好等待B退出。这是典型的双线程死锁了。

          针对(1),我这样处理。A等待B退出,只等待30毫秒,超时则调用TerminateThread强制结束B。死锁基本上消除,但是偶尔还是会出现。即使不等待30毫秒,直接强制结束,结果也一样。

         (2)对于上面提到的新情况,我暂时不清楚原因。

 

解决方法:

#define SEND_MESSAGE_TIME_OUT       (300)

不再使用SendMessage,而是改为:
 return SendMessageTimeout(m_hWnd, WM_SEARCH_CALLBACK, (WPARAM)&user_id, 0, SMTO_NORMAL, SEND_MESSAGE_TIME_OUT, NULL)==0 ? (-1) : 0;

使用SendMessageTimeout,当A线程处于等待或者繁忙的情况下,B线程直接返回,这样,B不用等待A响应也可以退出,从而避免了资源抢占导致的死锁。

 

By:zhanyonhu

   

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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