如何锁定对象以便它显示在 !dumpheap -thinlock 的输出中?

Tho*_*ler 2 c# windbg

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

我有所有类型死锁(lock 语句、ReaderWiterLock、ReaderWriterLockSlim 和 CriticalSection)的示例,但没有 Thinlocks。

创建 Thinlock 的代码是什么?

Tho*_*ler 5

Thinlock是一种访问时不发生冲突的锁。也许演示 Thinlock 的最简单的程序是

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

在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.
Run Code Online (Sandbox Code Playgroud)

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

0:004> dd 02782448-4 L2
02782444  80000001 67c4acc0
Run Code Online (Sandbox Code Playgroud)