【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

评论

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

大厂的人才衡量标准

池建强

人才标准

秒杀系统的挑战和应对方案

2流程序员

总结

chenzt

应用开发基础知识-文件系统

superman

文件系统

Atlassian 重磅推出12个新功能为您打造全新 DevOps 体验!

Atlassian

项目管理 DevOps Atlassian Jira

架构师训练营第9周

大丁💸💵💴💶🚀🐟

LeetCode题解:189. 旋转数组,3次翻转,JavaScript,详细注释

Lee Chen

大前端 LeetCode

秒杀系统的架构设计

莫莫大人

【第九周作业】

Aldaron

前端面试vue部分(1)——谈谈你对MVVM的理解

dd多了个多

面试 Vue 大前端 Web

JVM 垃圾回收原理

周冬辉

架构训练营第九周作业

张锐

1.8w字 | 初中级前端 JavaScript 自测清单 - 2

pingan8787

Java 大前端

关于微信电子发票生态,这三种服务商最有机会

诸葛小猿

电子发票 发票

前端面试 vue 部分 (2)——Vue是如何实现双向绑定的

dd多了个多

面试 Vue 大前端 Web

消息队列面试热点一锅端

yes

kafka 面试 RocketMQ 消息队列

第九周作业

andy

极客大学

垃圾回收

Mr.Monkey

架构师训练营第九章总结

叮叮董董

秒杀系统设计初稿

jason

《深度工作》学习笔记(4)

石云升

学习 读书笔记 习惯 专注 深度工作

Kafka集群缩容实战

我是个bug

大数据 kafka 运维 Big Data

架构师训练营 - 第九周 - 作业

韩挺

当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

鄙人薛某

Java 面试 集合 java基础

百度安全研究院:区块链智能合约介绍

百度安全

比特币 区块链 智能合约 以太坊

第九周总结

andy

起伏激荡的以太网,抱上这条大腿才能乘风破浪

脑极体

微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起

xcbeyond

架构 微服务

JVM学习总结

jason

架构师训练营第九章作业

叮叮董董

Elasticsearch从入门到放弃:瞎说Mapping

Jackey

elasticsearch

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