10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

在文心一言出生地,百度悄悄燃烧AI小宇宙

白洞计划

百度 文心一言

ChatGPT Turbo API 18元/100万个单词

kcodez

openai ChatGPT

赞不绝口!仅靠阿里P9分享的 Redis 工作手册,拿到60W年薪Offer

Java 数据库 redis 缓存 面试

2022 IoTDB Summit:IoTDB PMC 曹高飞《Apache IoTDB 秒级扩容能力与存算分离实践》

Apache IoTDB

数据库 IoTDB

【我在京东做研发】揭秘支撑京东万人规模技术人员协作的行云DevOps平台

京东科技开发者

架构实战营模块1第3课 - 什么是面向复杂度架构设计

净意

再有人问你什么是分库分表,直接把这篇文章发给他

Java 分库分表

老铁们看过来!2023首场昇腾AI开发者创享日来到“东北黑土地”沈阳

科技热闻

人工智能+低代码,打通AI落地的最后“一公里”

明道云

堪称神级!GitHub上标星157K的Java教程,全程干货,只讲重点

Java

2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等

汀丶人工智能

自然语言处理 数据标注

Portraiture4中文免费ps滤镜磨皮插件

茶色酒

Portraiture3

图像的滤波与图像增强的Matlab实现

timerring

数字图像处理

SpringBoot+ThreadPoolTaskExecutor 批量插入百万级数据实测

Java Spring Boot 多线程 ThreadPoolTaskExecutor

Spring Boot 整合流程引擎 Flowable,so easy

Java Spring Boot 流程引擎 flowable

手把手教你使用 Python 调用 ChatGPT-3.5-API

老表

Python GPT-3 ChatGPT

会声会影2023中文最新版消息

茶色酒

会声会影2023

字字珠玑!GitHub爆赞的网络协议手册,被华为大佬指定内部必学?

Java 计算机网络 网络协议

开源如何推动云计算的发展与创新 | 雨林开源行

开源雨林

开源 kubenetes OpenStack

JDK 环境配置

流火

Java centos jdk window

FL Studio2023免费中文版数字音频工作站软件

茶色酒

FL Studio2023

从理论到实践:MySQL性能优化和高可用架构,一次讲清

Java MySQL 数据库 面试 性能优化

ClickHouse 与 Amazon S3 结合?一起来探索其中奥秘

亚马逊云科技 (Amazon Web Services)

零基础如何学习Web 安全,如何让普通人快速入门网络安全?

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

一文彻底弄清楚分布式锁

Java 分布式锁

爱不释手!阿里十几位大牛联玦整理—23年最全面试八股文合集

Java java面试 Java八股文 Java面试题 Java面试八股文

2022 IoTDB Summit:Apache IoTDB PMC 张金瑞《为物联网场景优化的时序数据库共识协议》

Apache IoTDB

大数据 IoTDB

新必应(New Bing)申请出错终极方案

kcodez

微软 ChatGPT New Bing

在深圳龙岗,看见空间智能化的潮水涌动

脑极体

全屋智能

得物供应链复杂业务实时数仓建设之路

小小怪下士

Java 程序员 后端

MongoDB写入数据策略

NineData

nosql mongodb Journaling 写入策略 读策略

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