代码改变世界

利用压力测试来保证软件的质量(六) 死锁问题

  王克伟  阅读(351)  评论(0编辑  收藏  举报

DeadLock的一个可怕后果就是UI Hang住了(界面没反应),你一般会看到这个进程是Shell32.exe。

 

现在遇到一个Theme相关的Dead Lock问题:
\DumpFile\Dead Lock\20100704_DeadLock_poutlook.exe
\DumpFile\Dead Lock\20100703_DEADLOCK_poutlook.exe
\DumpFile\Dead Lock\20100627_DEADLOCKpoutlook.exe
\DumpFile\Dead Lock\20100622_DEADLOCKpoutlook.exe
\DumpFile\Dead Lock\20100707_DeadLockpoutlook.exe

如果用户改了theme,CThemePrimitive::UpateThread就会wake up起来
去更新theme的设置

这个时候会先enter theme内部的一个锁,然后调GDI的API做一些绘制的操作,当然GWES内部也有一个锁需要lock
另一方面GWES Control,在实现绘制的时候,需要调用theme API得到theme的设置
在调到theme API之前,因为是GWES的Control所以已经获得了GWES内部的锁,于是dead lock
两个锁theme的和GWES的,加锁的顺序反了

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示