写点什么

用 PostSharp 对.NET 做死锁检测

  • 2012-09-25
  • 本文字数:824 字

    阅读完需:约 3 分钟

AOP 框架 PostSharp 的开发公司 SharpCrafters 开发了一款即插即用的死锁检测工具包。只要在项目中增加一行代码,这个工具包就可以对 Mutex、Monitor、ReaderWriterLock 等大部分标准的基本锁机制进行死锁检测。

当线程等待锁超过 200 毫秒,工具包将执行一道死锁检测例程。如果检测到死锁,它会向受该死锁影响的所有线程扔出 DeadlockException。异常中详细报告了所有受影响的线程和锁,供用户分析并修复问题。

死锁检测本身并不十分困难,但需要将大量的刻板代码细致地插入到程序的各个部位。 PostSharp Threading Toolkit 使用 IL 重写技术自动地注入这些代码到锁语句周围。

有几点需要注意。PostSharp 用了十分保守的逻辑去防止误报;他们认为错误地扔出一个 DeadlockException 比一个没有被检测到的死锁更糟糕。而且,它不能用于非对称锁,例如 ManualResetEvent,、AutoResetEvent,、Semaphore 和 Barrier,因为“并不清楚哪个线程负责‘发信号’或‘释放’同步资源”。

它能处理的锁包括:

  • Mutex:WaitOne、WaitAll、Release
  • Monitor:Enter、Exit、TryEnter、TryExit(包括 C#关键字 lock;不支持 Pulse 和 Wait 方法)
  • ReaderWriterLock:AcquireReaderLock、AcquireWriterLock、ReleaseReaderLock、ReleaseWriterLock、UpgradeToWriterLock、DowngradeToReaderLock(不支持 ReleaseLock、RestoreLock)
  • ReaderWriterLockSlim:EnterReadLock、TryEnterReadLock、EnterUpgradeableReadLock、TryEnterUpgradeableReadLock、EnterWriteLock、TryEnterWriteLock、ExitReadLock、ExitUpgradeableReadLock、ExitWriteLock
  • Thread:Join

PostSharp Threading Toolkit 以 BSD 2-Clause 协议发布于 GitHub

查看英文原文 http://www.infoq.com/news/2012/09/PostSharp-Deadlock


感谢郭晓刚对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-09-25 23:172795

评论

发布
暂无评论
发现更多内容

商品中心—商品考核系统的技术文档

电子尖叫食人鱼

架构 教程

域名锁定是什么意思?怎么解除域名锁定状态?

防火墙后吃泡面

西南会议 | 2025 Altair 区域技术交流会精彩内容提前揭晓,立即报名锁定技术干货

Altair RapidMiner

AI 数字孪生 仿真 CAE 航空航天

AI 如何重塑 B 端产品用户体验

inBuilder低代码平台

ON1 Photo RAW 2025.2 for Mac(照片编辑器)

Geek贝

龙蜥社区两大委员会月度会议圆满召开

OpenAnolis小助手

开源 操作系统 龙蜥社区 OpenAnolis Anolis OS

百度垂搜数据管理系统弹性调度优化实践

百度Geek说

大数据 云原生 搜索 弹性调度

2025杭州国际智慧城市,物联网展览会

AIOTE智博会

物联网博览会 物联网展 智慧城市展 智慧城市博览会 iot展

京东商品详情数据接口抓取指南

tbapi

京东API接口 京东商品详情接口 京东数据采集

中小企业数字化免费使用的开源MES系统/MES源码

万界星空科技

开源 源代码 开源软件 开源mes mes源码

如何在应用中实现地图关键字搜索和标记聚合功能?

HarmonyOS SDK

harmoyos

在禧玛诺工厂,一位工程师的零代码实践

NocoBase

开源 低代码 数字化转型 零代码 制造业

Prompt for mac远程SSH服务器管理工具

Geek贝

五分钟搭建属于你的AI助手:Ollama+DeepSeek+AnythingLLM深度整合教程

量贩潮汐·WholesaleTide

人工智能 AI DeepSeek

首秀!行云创新“智算解决方案”,即将亮相华为开发者大会

行云创新

AI 华为开发者大会2025

TypeScript实用类型之Omit

不在线第一只蜗牛

typescript

尖叫青蛙Screaming Frog SEO Spider 激活码+安装教程-Mac/win

Rose

2025浙江安博会·浙江(杭州)国际安防产品博览会

AIOTE智博会

安防展 安博会 浙江安博会 杭州安博会

欢迎“大表哥”登录Mac!用CrossOver就能在苹果电脑上玩《荒野大镖客2》了

阿拉灯神丁

Mac软件 mac冒险游戏 crossover mac 破解版 苹果电脑游戏推荐

聚焦“AI+运维”深度融合,龙蜥系统运维联盟 MeetUp 圆满结束

OpenAnolis小助手

AI 操作系统 系统运维 龙蜥社区 龙蜥meetup

NebulaAI亮相华为开发者大会:NebulaAI×iDME,AI赋能千行百业,松山湖见!

行云创新

AI 华为开发者大会2025

TinyPNG and TinyJPG for Mac(ps图像压缩插件) 详细安装教程

Rose

酷开携手途虎养车落地AI智能体车机,打破后装座舱智能化瓶颈

业界

华为云亮相 KubeCon China 2025,开源生态引领 AI 时代技术跃迁

华为云原生团队

云计算 容器 云原生

飞机的“十亿分之一”是什么?从安全评估到仿真验证全揭秘

DevOps和数字孪生

航空航天 飞机

电商平台促销期DDoS攻击应对策略

网络安全服务

CDN 服务器 宽带 电商节 DDoS 攻击

商品中心—商品考核系统的技术文档(二)

电子尖叫食人鱼

架构 教程

PS插件:Infinite Panel Black & White for Mac(无限黑白面板插件)

Rose

Java 内存模型与 Happens-Before 关系深度解析

不在线第一只蜗牛

Java

摆脱硬件依赖:SkyEye在轨道交通中的仿真应用

DevOps和数字孪生

轨道技术 轨道交通

领 “鸿蒙有礼”专属权益,解锁鸿蒙电脑高品质内容体验

最新动态

用PostSharp对.NET做死锁检测_.NET_Jonathan Allen_InfoQ精选文章