他用c#中的lock关键字锁住了我的东西

本文关键字:我的 锁住 关键字 中的 lock 他用 | 更新日期: 2023-09-27 18:01:30

我的代码中有lock关键字。它冻结是因为别的东西把它锁住了。是否有某种命令或实用程序可以用来查看谁或什么?

他用c#中的lock关键字锁住了我的东西

您可以使用windbg附加到进程,并使用sosex.dll查看哪些线程使用dlk命令死锁。

http://www.stevestechspot.com/SOSEXV40NowAvailable.aspx

如果您正在使用lock,那么您应该在您控制的对象上使用它。通常,这是一个只用于锁的虚拟对象,例如

Object lockObj = new Object();
//some code
void MyCoolFunc()
{
    lock(lockObj)
    {
        //do some not threadsafe stuff
    }
}

不幸的是,没有简单的答案…但是你可以使用像国际象棋这样的工具来帮助你。最后,您可能必须检查代码中可能导致死锁的竞争条件。在任何看到锁语句或其他线程同步对象(如监视器、互斥锁等)的地方,您都希望检查它们锁定的是什么,并找到锁定同一对象的其他代码片段

我认为您可以使用VS.NET附加到挂起的进程并单击暂停。然后调用线程窗口(调试->Windows->线程)并检查哪些线程被锁定及其原因。这看起来是最简单的解决方案。