Skip to main content
 首页 » 编程设计

c#之如何锁定对象,使其显示在 !dumpheap -thinlock 的输出中

2024年02月13日51落叶无声

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

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

创建 thinlock 的代码是什么?

请您参考如下方法:

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

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