c# - 如何将诊断添加到 C# 锁定功能以进行多线程调试

标签 c# multithreading locking mutex

是否可以填充 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/

相关文章:

c++ - 无需复制即可线程安全读取类成员 vector

c# - 本地运行 Azure 函数时出现来自 WebJobsBuilderExtensions 的 StackOverFlow 异常

multithreading - iOS4 & 背景 [UIImage setImage :]

Java CompletableFuture.runAsync 递归...有潜在风险吗?

java - 澄 list 一作家

c# - 关于C#中lock语句的困惑

c# - 样本采集器抓取的 Directshow 帧被裁剪

c# - Unity 3 和错误 "The type name or alias "xxxxx“无法解析。请检查您的配置文件并验证此类型名称。”

c# - 如何在客户端系统上调试 C# 应用程序?

sql-server - 如何更改 SQL Server 中的锁定策略?