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

    这是我两年前遇到的问题,只有一个临界区,在对窗口进行操作的时候就会出现死锁!按照我当时的经验,我想到的是:你妹,只有一个临界区竟然锁起了,电脑你有没有认真看教科书啊?

    还好那中情况很容易触发,经过多次调试,以及在CSDN朋友们的帮助下,确认了问题的根源,那就是:win程序在用SendMessage发送、响应消息的时候也相当于是一个临界区,因为用Send的方式发送消息时,会等待消息被处理之后再返回。而对界面的操作几乎都要用Send的方式发送消息。

    若出现以下的步骤,在只有一个临界区的时候就会死锁:

    1.线程1进入临界区

    2.操作界面触发Send方式的消息A

    3.响应消息A,需要进入临界区(等待进入)

    4.线程1用Send方式发送消息B(等待响应)

    此时,线程1 进入了临界区,等待响应消息。主线程正在响应消息,但是要等待进入临界区才能完成,于是死锁了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值