写点什么

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

评论

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

财务或类财务系统数值精度设计

路边水果摊

数字 财务 精度 数值

2021,你还在写“赤裸裸”的API吗?

EMQ X Cloud 正式支持 Microsoft Azure 平台,助力企业出海业务

EMQ映云科技

azure 云端 云上数据 emq

架构训练营模块三作业

晨晨

架构训练营

以1敌10不是梦,Spring Boot企业级真实应用案例

博文视点Broadview

小透明学弟的华为上岸之路

程序员鱼皮

Java c++ Python 大前端 后端

秒懂 Java 的三种代理模式

看完这篇文章,你也可以手写MyBatis部分源码(JDBC)

来自网络资源资产管理的灵魂拷问

鲸品堂

网络 资源 运营商

Lazada首届技术开放日开麦在即 共享技术创新最佳实践

哔哩哔哩B站视频下载器推荐(简单又好用)

资源君

工具 分享 哔哩哔哩 b站视频下载 教程分享

电脑里的视频被误删了可以用EasyRecovery恢复吗?

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!

Java虚拟机之CMS垃圾收集器

文档内容结构化在百度文库的技术探索

百度Geek说

百度 大前端

保洁阿姨分享:腾讯架构师JDK源码笔记,13万字,带你飙向实战

保安小王分享:四面字节跳动,终拿Offer,只有努力,方能成功

银行4.0的AI世界——开启算法力的时代

索信达控股

手把手教你实现Android编译期注解

vivo互联网技术

android 注解 sdk

Cypress 自动化测试

admin

自动化测试 Cypress 测试 单元测试 UI测试

模块三作业

NewBranSTONE

架构实战营

【云洲智造】直播间下午4:30准时开播!

工业互联网

聊一聊在阿里做了 8 年研发后,我对打造大型工程研发团队的再思考

尔达Erda

开源 云原生 研发管理 PaaS 研发

不收藏你就后悔吧!费了三天才从GitHub上扒下的阿里Java优化笔记

科技监管能源运作?智慧能源从光热发电技术开始描述

一只数据鲸鱼

数据可视化 智慧能源 光热发电

如何基于磁盘 KV 实现 Bitmap

Kvrocks

redis BitMap storage KV存储引擎

最壕逆天改命:18名Java程序员凭阿里P8笔记,同时斩获一线大厂offer

Java架构师迁哥

Unity ML-agents 参数设置解明

行者AI

东京奥运会与网络安全背后的速度博弈!

郑州埃文科技

基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)

尔达Erda

开源 云原生 数字化转型 PaaS 数字化

Abp太重了?轻量化Abp框架

Patronum

学习 程序员 架构 框架 Abp

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