如何锁定一个对象,使其显示在!dumpheap -thinlock的输出中?

时间:2013-12-01 22:33:09

标签: c# windbg

我正在用C#创建一些示例程序来演示!SOS.syncblk,!SOSEX.dlk和WinDbg可用的其他扩展的用法。

我有所有类型死锁的示例(锁定语句,ReaderWiterLock,ReaderWriterLockSlim和CriticalSection),但不是细锁。

创建精简锁的代码是什么?

1 个答案:

答案 0 :(得分:4)

瘦锁是一种在访问时没有冲突的锁。 也许最简单的演示细锁的程序是

class Program
{
    private static string l = "Demo lock resource";
    static void Main()
    {
        lock (l)
        {
            Thread.Sleep(Timeout.Infinite);
        }
    }
}

在WinDbg中它显示如下:

0:004> .loadby sos clr
0:004> !dumpheap -thinlock
 Address       MT     Size
02782448 67c4acc0       50 ThinLock owner 1 (0065cd98) Recursive 0
Found 1 objects.

dd可以显示对象标题和方法表:

0:004> dd 02782448-4 L2
02782444  80000001 67c4acc0