zoukankan      html  css  js  c++  java
  • 用PostSharp对.NET做死锁检测

    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

  • 相关阅读:
    POJ1806 Manhattan 2025
    POJ1258 AgriNet【最小生成树】
    POJ1789 Truck History【最小生成树】【终于AC了】
    memset的用法
    HDOJ1106 排序
    POJ2965
    414某OJ竞赛题
    HDOJ1745 I hate it【线段树】
    HDOJ2795 Billboard【线段树】
    蓝桥杯o(︶︿︶)o 唉
  • 原文地址:https://www.cnblogs.com/shihao/p/2705248.html
Copyright © 2011-2022 走看看