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

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

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

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

    1.线程1进入临界区

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

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解决死锁问题可以使用多个方法之一是“dump死锁临界区”。当发生死锁系统的资源被互相锁定,无法继续进展。为了解除死锁,我们可以借助“dump死锁临界区”的方式来分析和识别问题。 首先,我们需要定位到发生死锁临界区。这个临界区是指导致死锁发生的关键资源等待和竞争的区域。我们可以使用各种调试工具和技术,如追踪系统日志、分析程序源代码、基于日志的调试等,来找到可能引发死锁的代码段。 在定位到临界区后,我们可以通过“dump死锁临界区”的方式来进一步分析问题。这一步通常需要使用专门的调试工具,如调试器、性能分析器等。我们可以在死锁发生,通过工具从临界区获取当前的资源锁定情况、线程状态、调用栈等信息,并将其“dump”(转储)到一个文件或者内存进行后续分析。 通过获取临界区的“dump”,我们可以获得关键数据进行死锁分析和定位。我们可以从获得发生死锁原因、引发死锁的具体条件,以及参与死锁的线程和资源等信息。这样有助于我们深入分析和识别问题,并采取相应的解决措施。 综上所述,“dump死锁临界区”是一种常用的解决死锁问题的方法。它通过获取临界区的关键信息,帮助我们分析和识别死锁的发生原因,并采取相应的解决措施。此方法需要借助专门的调试工具来实现,并能够提供有价值的信息用于后续的死锁分析和解决工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值