gpt4 book ai didi

c# - 你如何找到锁的所有者(Monitor)?

转载 作者:太空狗 更新时间:2023-10-29 18:33:05 24 4
gpt4 key购买 nike

有没有办法发现哪个线程当前拥有锁?具体来说,我正在寻找一些代码来打印出阻止获取锁的线程。我想尝试锁定给定的超时时间,然后报告哪个线程正在阻止获取锁定。

最佳答案

没有。直接写代码:

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# - 你如何找到锁的所有者(Monitor)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com