写点什么

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

评论

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

HTTP2服务器推送的第一次尝试

Gopher指北

HTTP2.0 Go 语言

排名前 16 的 Java 工具类

Bruce Duan

java工具类

拒招中国程序员后,开源平台 GitLab 又开始大规模封杀开发者账户

Java架构师迁哥

关于linux操作系统中的buff/cache

程序员架构进阶

Linux cache buffer

SQL数据库:子查询和关联子查询

正向成长

SQL子查询 SQL关联查询

你以为只是简单的排序?(二)

书旅

数据结构与算法 Go 语言

anyRTC AI降噪|让声音更清晰

anyRTC开发者

人工智能 AI 音视频 WebRTC RTC

遥感影像处理有高招,“专治”各类花式并发的述求!

华为云开发者联盟

容器 k8s 遥感

从红黑树的本质出发,彻底理解红黑树!

996小迁

Java 架构 面试 程序人生

Spring / Spring boot 异步任务编程 WebAsyncTask

Bruce Duan

异步任务编程 WebAsyncTask

快速理解二十三种设计模式(速记)

simon

设计模式 23种设计模式 Java设计模式

在Android中使用DataBinding(Kotlin)

simon

android Android进阶 JetPack DataBinding 数据绑定

【乘风破浪的开发者】丁一超:从AI实战营出发探索未知的AI世界

华为云开发者联盟

华为 AI modelarts

下笔如有神:这是一个基于营销行业的 AI 技术实践

京东科技开发者

人工智能 自然语言处理 nlp

影响王兴的一本书

池建强

读书笔记 无限游戏 王兴

亿级大表分库分表实战总结(万字干货,实战复盘)

比伯

Java 编程 程序员 架构 计算机

权威报告发布:京东智联云首次参评即跻身机器学习卓越表现者阵营

京东科技开发者

人工智能 云计算 供应链

刷Github时发现了一本阿里大神的算法笔记!标星70.5K

Java架构师迁哥

普渡科技荣登甲子光年“2020中国最具商业潜力的20家机器人Cool Vendor”

DT极客

成年人的世界都不容易-看看做到年薪50万的程序员,到底有多累?

Java架构师迁哥

MySQL全面瓦解—子查询和组合查询

比伯

Java 编程 程序员 架构 计算机

多线程问的太深入不知道怎么回答,从volatile开始给你讲清楚

小Q

Java 学习 面试 volatile 多线程

Spring Boot 监听 Redis Key 失效事件实现定时任务

Bruce Duan

Redis监听 监听过期键

背后技术:双11还能创造什么?

人工智能 数据挖掘 大数据 科技

从“小众”到“首选”,推动云原生产业落地华为云作用几何?

华为云开发者联盟

云计算 架构 容器

你还在使用迭代器删除集合数据,out了,Java 中函数removeIf 不香么

Geek_6f0746

Java JAVA集合 Java迭代器

【涂鸦物联网足迹】涂鸦云平台标准指令集说明

IoT云工坊

人工智能 cpu 物联网 智能家居 指令集

python+requests对app和微信小程序进行接口测试

测试人生路

Python 接口测试

完美!阿里P8仅用242页笔记,就由浅入深讲解了SQL概念

Java~~~

Java sql 阿里巴巴 SQL语法 sql查询

五面进军饿了么!复盘总结11月上半月大厂面试真题,押题命中率高达95%以上

Java架构追梦

Java 阿里巴巴 架构 面试

React Fiber 是什么?

局外人

react.js 大前端 React

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