写点什么

用 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:172837

评论

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

AI与低代码的结合及应用

力软低代码开发平台

Transformer:让ChatGPT站在肩膀上的巨人?

Baihai IDP

AI Transformer

Osx10.14升级watchman踩坑记

Geek_pwdeic

macos homebrew

WhaleDI数据治理利器之“低成本数据质量管理”

鲸品堂

12 月 PK 榜

信用卡应用评测系列——阳光惠生活APP7.0打造“世界波”专区

易观分析

金融 银行 信用卡

自动化测试技术笔记(一):前期调研怎么做

老张

自动化测试

Verilog语言的循环语句

芯动大师

Verilog Verilog语法 Verilog循环

2022年中国汽车智能网联云服务分析

易观分析

5G 汽车 智联网

React源码分析5-commit

flyzz177

React

Spring中11个最常用的扩展点,你知道几个?

JAVA旭阳

Java spring

如何提升工作效率--工具篇(60/100)

hackstoic

工具 工作效率

一文读懂于Zebec生态中的潜在收益方式

股市老人

React源码分析7-state计算流程和优先级

flyzz177

React

【深入浅出Spring原理及实战】「源码原理实战」从底层角度去分析研究PropertySourcesPlaceholderConfigurer的原理及实战注入机制

码界西柚

spring 12月日更 12 月 PK 榜 Spring 配置解析

flutter系列之:移动端手势的具体使用

程序那些事

flutter 大前端 程序那些事

GBase 8s安装

@下一站

国产数据库 12月日更 12月月更 Gbase8s

华为时习知,让企业培训更简单!

科技怪授

华为

互联网医疗领域月度观察——二十大报告明确提出健康中国建设目标,互联网医疗是建设重点

易观分析

互联网医疗

HTTP协议基础知识

穿过生命散发芬芳

HTTP 12月月更

2022-12-19:大的国家。如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 250000

福大大架构师每日一题

数据库 福大大

React Streaming SSR 原理解析

字节跳动终端技术

React

React源码分析6-hooks源码

flyzz177

React

数据治理体系建设与数据资产路线图规划

用友BIP

在霍格沃兹测试开发学社学习是种怎样的体验?

测吧(北京)科技有限公司

测试

优化 20% 资源成本,新东方的 Serverless 实践之路

阿里巴巴云原生

阿里云 Serverless 云原生

为什么数字化时代需要 BizDevOps?

阿里云云效

DevOps 数字化转型 数字化 BizDevOps

商密SIG月度动态:文件加密支持SM4算法、Anolis 8.8将默认集成 | 龙蜥 SIG

OpenAnolis小助手

开源 算法 龙蜥社区 商密 SM4

正向拆解mlops

mlops

MLOps

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