如何将诊断添加到 C# 锁定功能以进行多线程调试
How to add diagnostics to C# lock function for multithreading debugging
是否可以填充 C# 锁定功能以添加诊断?
我很想知道何时获取或释放锁、锁计数以及获取锁的线程的托管线程 ID。
在 C++ 中,您可以编写自己的 Mutex class 并提供自己的锁定功能,您可以自己添加此类诊断。
是否可以包装锁定功能或填充功能以提供诊断?
在此先感谢您的帮助。
你不能填充 lock
语句,但你当然可以实现你自己的锁 class 委托给 Monitor
class (它是 lock
).
C# 规范 8.12 说 lock
语句是 "precisely equivalent" 到:
bool __lockWasTaken = false;
try {
System.Threading.Monitor.Enter(x, ref __lockWasTaken);
...
}
finally {
if (__lockWasTaken) System.Threading.Monitor.Exit(x);
}
所以没办法"hook in"。不过,我想知道,如果您定义自己的方法 System.Threading.Monitor.Enter
会发生什么……您永远不会让编译器使用它,因为它是一个不明确的名称。但是规范并没有说明接下来会发生什么。
您或许可以安装自定义 CLR 主机或探查器并使用本机 API 来填充锁。不过,这是一个核选项。
是否可以填充 C# 锁定功能以添加诊断?
我很想知道何时获取或释放锁、锁计数以及获取锁的线程的托管线程 ID。
在 C++ 中,您可以编写自己的 Mutex class 并提供自己的锁定功能,您可以自己添加此类诊断。
是否可以包装锁定功能或填充功能以提供诊断?
在此先感谢您的帮助。
你不能填充 lock
语句,但你当然可以实现你自己的锁 class 委托给 Monitor
class (它是 lock
).
C# 规范 8.12 说 lock
语句是 "precisely equivalent" 到:
bool __lockWasTaken = false;
try {
System.Threading.Monitor.Enter(x, ref __lockWasTaken);
...
}
finally {
if (__lockWasTaken) System.Threading.Monitor.Exit(x);
}
所以没办法"hook in"。不过,我想知道,如果您定义自己的方法 System.Threading.Monitor.Enter
会发生什么……您永远不会让编译器使用它,因为它是一个不明确的名称。但是规范并没有说明接下来会发生什么。
您或许可以安装自定义 CLR 主机或探查器并使用本机 API 来填充锁。不过,这是一个核选项。