[英]How do you find the owner of a lock (Monitor)?
有没有办法发现当前拥有锁的线程? 具体来说,我正在寻找一些代码来打印防止锁被采取的线程。 我想尝试锁定给定的超时,然后报告哪个线程阻止锁被采取。
不。只需编写代码:
private int lockOwner;
private object lockObject = new object();
...
void foo() {
lock(lockObject) {
lockOwner = Thread.CurrentThread.ManagedThreadId;
// etc..
}
}
有一个没有记录的方法来获得锁拥有者,它不能保证工作,但通常会。 当您有一个断点活动时,使用Debug + Windows + Memory + Memory1。 在“地址”输入框中,键入锁定对象的名称(“lockObject”),然后按Enter键。 地址框更改为内存中对象的地址。 编辑它并在地址后附加“-4”,按Enter键。 转储中的前4个字节为您提供十六进制的ManagedThreadId。 这适用于32位代码,只要您从未在锁定对象上调用GetHashCode。 当然你不应该这样。
编辑:
C# :
对于C#,您可以在这里得到答案:
来自Hans Passant
,
class Test {
private object locker = new object();
public void Run() {
lock (locker) { // <== breakpoint here
Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.