写点什么

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

评论

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

隔壁工程师都馋哭了我的逆向工程IDA,说要给我搓背捏脚

网络安全学海

网络安全 信息安全 渗透测试 漏洞分析 逆向工程

推荐系统的价值观(三十二)

Databri_AI

价值观 推荐系统

PowerShell 哈希表

耳东@Erdong

PowerShell 7月日更

Linux之find xargs

入门小站

Linux

5分钟速读之Rust权威指南(三十九)unsafe

wzx

rust

设计消息队列存储消息数据的MySQL表格

Vincent

架构训练营

在线ASCII艺术字生成工具,SpringBoot banner生成工具

入门小站

工具

前端 JavaScript 实现一个简易计算器

编程三昧

JavaScript 大前端 代码实现

你的直观感受有可能是错的

石云升

学习 认知偏差 7月日更

解读区块链在制药和物流管理中具备的优势

CECBC

《持之以恒的从事运动》五

Changing Lin

7月日更

我看 JAVA 之 并发编程【一】FutureTask & Callable

awen

Java 多线程 Callable FutureTask

禾木之变:2021我们该如何持续拥抱AI?

脑极体

架构实战营模块8作业

Geek_649372

架构实战营

模块一作业

君子意如何

「架构师训练营第 1 期」

详聊微服务观测|从监控到可观测性,我们最终要走向哪里?

尔达Erda

开源 微服务 云原生 APM PaaS

吃药吗?AI造的!

脑极体

数据仓库的基本要求

奔向架构师

数据仓库 数据架构 7月日更

浅谈云上攻防——Web应用托管服务中的元数据安全隐患

腾讯安全云鼎实验室

安全攻防 云安全 元数据 网络攻防

区块链技术在“三资”监管领域的应用

CECBC

数字政府建设如火如荼 区块链保证数据真实安全

CECBC

都说数仓是面向主题建设的,那数仓的主题和主题域又应该怎么划分呢?

白贺BaiHe

数仓 7月日更 数仓主题 主题域 数仓建设

jTDS 驱动导致 cpu 100%

顾五木

cpu占用100% 线上程序问题

打造中国数字军人 数军科技携黑科技亮相(北京)军博会

科技热闻

讨论 | 低代码能解决制造业企业数字化转型所面临的问题吗?

优秀

低代码

面对大规模 K8s 集群,这款诊断利器必须要“粉一波”!

尔达Erda

开源 云原生 operator PaaS kubernete

幸福来敲门

卢卡多多

幸福 7月日更

🏆「作者推荐」【JVM性能分析】精心准备了一套JVM分析工具的锦囊(上部)

码界西柚

JVM 性能分析 jvm调优 7月日更

利用 Vector 从日志创建指标来提高系统的可观测性

哈德韦

日志 可观测性 Prometheus SRE vector

【得物技术】常用注册中心原理及比较

得物技术

zookeeper nacos Consul Eureka 注册中心

phpExcel:Excel数据导入导出最佳实战

devpoint

php Excel thinkphp 7月日更

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