是否可以填充 C# 锁定功能,以添加诊断?
我很想知道何时获取或释放锁、锁计数以及获取锁的线程的托管线程 ID。
在 C++ 中,您编写自己的 Mutex 类并提供自己的锁定功能,并且您可以自己添加此类诊断。
是否可以包装锁定功能或填充功能以提供诊断?
在此先感谢您的帮助。
最佳答案
您不能填充 lock
语句,但您当然可以实现自己的锁类,该类委托(delegate)给 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 主机或分析器,并使用 native API 来填充锁。不过,这是一个核选项。
关于c# - 如何将诊断添加到 C# 锁定功能以进行多线程调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525253/