是否可以填充C#锁定功能,添加诊断信息? 我希望看到锁被占用或释放,锁定计数以及获取锁定的线程的托管线程ID。
在C ++中,您编写自己的Mutex类并提供自己的锁定功能,并且您可以自己添加这些类型的诊断。
是否可以包装锁定功能或填充功能以提供诊断功能?
提前感谢您的任何帮助。
答案 0 :(得分:1)
您无法对lock
语句进行填充,但您当然可以实现自己的锁定类Monitor
类(基于lock
)。
C#规范8.12说lock
语句“完全等同于”:
bool __lockWasTaken = false;
try {
System.Threading.Monitor.Enter(x, ref __lockWasTaken);
...
}
finally {
if (__lockWasTaken) System.Threading.Monitor.Exit(x);
}
所以没有办法“挂钩”。我想知道,如果你定义自己的方法System.Threading.Monitor.Enter
会发生什么......你永远不会让编译器使用它,因为它是一个模糊的名字。但规范并未说明当时会发生什么。
您可以安装自定义CLR主机或分析器,并使用本机API来填充锁。不过,这是一个核选择。