写点什么

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

评论

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

社交出海,应如何突破安全与合规困局? | 精选案例

亚马逊云科技 (Amazon Web Services)

亚马逊云科技发布中国业务战略!

亚马逊云科技 (Amazon Web Services)

快速学一遍vue的状态管理模式 -- Vuex

空城机

JavaScript Vue 大前端 4月日更 vuex

大数据计算时数据倾斜问题及解决方案

五分钟学大数据

大数据 4月日更

作业内容1

谢博琛

架构师实战营[M1]-微信的业务架构和学生管理系统架构设计

LeoWang

进程、线程、协程

无心

网络编程 操作系统

面试的信心来源于过硬的基础(iOS开发方向)

ios 面试

团队里不能留的三种人

石云升

辞退 28天写作 职场经验 管理经验 4月日更

架构师实战营 [模块一]- 微信业务架构和学生管理系统架构设计

ifc177

架构实战营

架构实战营第一期作业

王华

架构实战营

crudapi零代码开发平台应用场景和成功案例

crudapi

RESTful API sdk crud crudapi

Amazon SageMaker Debugger 推出模型分析功能啦 | 新服务上线

亚马逊云科技 (Amazon Web Services)

KAIFA 的「AMI 智能计量系统解决方案」出海记 | 精选案例

亚马逊云科技 (Amazon Web Services)

开源软件运动|网景公司|大教堂与集市

开源青年

开源 开源青年 开源文化 人物志

iOS 面试策略之代码考查到offer的比较和选择

iOSer

ios 面试

模块一:课后作业

黄先生

架构实战营

大数据分析之分析模型介绍

大数据技术指南

数据分析 4月日更

全面升级! 星环科技基础软件再升级 赋能数字中国建设

星环科技

NoCode 实战 | 零代码应用开发,轻松搞定任务跟踪管理难题(下)

亚马逊云科技 (Amazon Web Services)

亚马逊云科技大中华区企业业务拓展总经理凌琦:云计算赋能芯片设计和制造

亚马逊云科技 (Amazon Web Services)

架构实战训练营-模块一课后作业

Johnny

架构实战营

Java 并发基础(四):再谈 CyclicBarrier

看山

Java并发

通过校企合作,我们打造了一个培养应用型人才的“梦工场” | 精选案例

亚马逊云科技 (Amazon Web Services)

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一

阿里巴巴中间件

Java 并发基础(二):主线程等待子线程结束

看山

Java并发

Java 并发基础(三):再谈 CountDownLatch

看山

Java并发

理查德·斯托曼:为了自由,我决定写一个GNU操作系统(下)

开源青年

开源 开源青年 开源文化 人物志

架构实战营 - 作业01

Kram

理查德·斯托曼:我能发起“自由软件”运动全靠那台打印机(上)

开源青年

开源 #人物志 开源青年 开源文化

话说 内存屏障,有序性保证

木子的昼夜

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