Csharp/C#教程:你如何找到锁的所有者(监视器)?分享


你如何找到锁的所有者(监视器)?

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

不。只需编写代码:

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个字节为您提供hex的ManagedThreadId。 这适用于32位代码,只要您从未在锁定对象上调用GetHashCode。 当然你不应该这样做。

编辑:

C# :

对于C#,您可以在这里得到答案:

来自Hans Passant

上述就是C#学习教程:你如何找到锁的所有者(监视器)?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 class Test { private object locker = new object(); public void Run() { lock (locker) { // <== breakpoint here Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId); } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998454.html

(1)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐