您的位置:首页 > 其它

在编写windows程序时,只有一个临界区还出现死锁的常见原因。

2015-02-09 12:30 429 查看
这是我两年前遇到的问题,只有一个临界区,在对窗口进行操作的时候就会出现死锁!按照我当时的经验,我想到的是:你妹,只有一个临界区竟然锁起了,电脑你有没有认真看教科书啊?
还好那中情况很容易触发,经过多次调试,以及在CSDN朋友们的帮助下,确认了问题的根源,那就是:win程序在用SendMessage发送、响应消息的时候也相当于是一个临界区,因为用Send的方式发送消息时,会等待消息被处理之后再返回。而对界面的操作几乎都要用Send的方式发送消息。
若出现以下的步骤,在只有一个临界区的时候就会死锁:
1.线程1进入临界区
2.操作界面触发Send方式的消息A
3.响应消息A,需要进入临界区(等待进入)
4.线程1用Send方式发送消息B(等待响应)
此时,线程1 进入了临界区,等待响应消息。主线程正在响应消息,但是要等待进入临界区才能完成,于是死锁了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐