多线程单例

using System;

namespace Library
{
    public class ABC
    {
        private static ABC instance;
        private ABC() { }

        public static ABC GetInstance()
        {
            if (instance == null)
            {
                instance = new ABC();
            } 

            return instance;
        }
    }

public class ABCLock { private static ABCLock instance; private static readonly object _syncLock = new object(); private ABCLock() { } public static ABCLock GetInstance() { if (instance == null) { lock (_syncLock) { if (instance == null) { instance = new ABCLock(); } } } return instance; } } public class ABCLockVolatile { private volatile static ABCLockVolatile instance; private static readonly object _syncLock = new object(); private ABCLockVolatile() { } public static ABCLockVolatile GetInstance() { if (instance == null) { lock (_syncLock) { if (instance == null) { instance = new ABCLockVolatile(); } } } return instance; } } public sealed class XYZ { private readonly static Lazy<XYZ> instance = new Lazy<XYZ>(() => new XYZ()); private XYZ() { } public static XYZ GetInstance() { return instance.Value; } } }

 

 

public class ABC

.class public auto ansi beforefieldinit Library.ABC
    extends [mscorlib]System.Object
{
    // 成员
    .field private static class Library.ABC 'instance'

    // 方法
    .method private hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // 方法起始 RVA 地址 0x2050
        // 方法起始地址(相对于文件绝对值:0x0250)
        // 代码长度 7 (0x7)
        .maxstack 8

        // 0x0251: 02
        IL_0000: ldarg.0
        // 0x0252: 28 12 00 00 0A
        IL_0001: call instance void [mscorlib]System.Object::.ctor()
        // 0x0257: 2A
        IL_0006: ret
    } // 方法 ABC::.ctor 结束

    .method public hidebysig static 
        class Library.ABC GetInstance () cil managed 
    {
        // 方法起始 RVA 地址 0x2058
        // 方法起始地址(相对于文件绝对值:0x0258)
        // 代码长度 23 (0x17)
        .maxstack 8

        // 0x0259: 7E 01 00 00 04
        IL_0000: ldsfld class Library.ABC Library.ABC::'instance'
        // 0x025E: 2D 0A
        IL_0005: brtrue.s IL_0011

        // 0x0260: 73 01 00 00 06
        IL_0007: newobj instance void Library.ABC::.ctor()
        // 0x0265: 80 01 00 00 04
        IL_000c: stsfld class Library.ABC Library.ABC::'instance'

        // 0x026A: 7E 01 00 00 04
        IL_0011: ldsfld class Library.ABC Library.ABC::'instance'
        // 0x026F: 2A
        IL_0016: ret
    } // 方法 ABC::GetInstance 结束

} // 类 Library.ABC 结束

 

 

public class ABCLock

.class public auto ansi beforefieldinit Library.ABCLock
    extends [mscorlib]System.Object
{
    // 成员
    .field private static class Library.ABCLock 'instance'
    .field private static initonly object _syncLock

    // 方法
    .method private hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // 方法起始 RVA 地址 0x2070
        // 方法起始地址(相对于文件绝对值:0x0270)
        // 代码长度 7 (0x7)
        .maxstack 8

        // 0x0271: 02
        IL_0000: ldarg.0
        // 0x0272: 28 12 00 00 0A
        IL_0001: call instance void [mscorlib]System.Object::.ctor()
        // 0x0277: 2A
        IL_0006: ret
    } // 方法 ABCLock::.ctor 结束

    .method public hidebysig static 
        class Library.ABCLock GetInstance () cil managed 
    {
        // 方法起始 RVA 地址 0x2078
        // 方法起始地址(相对于文件绝对值:0x0278)
        // 代码长度 58 (0x3a)
        .maxstack 2
        .locals init (
            [0] bool,
            [1] object
        )

        // 0x0284: 7E 02 00 00 04
        IL_0000: ldsfld class Library.ABCLock Library.ABCLock::'instance'
        // 0x0289: 2D 2D
        IL_0005: brtrue.s IL_0034

        // 0x028B: 16
        IL_0007: ldc.i4.0
        // 0x028C: 0A
        IL_0008: stloc.0
        .try
        {
            // 0x028D: 7E 03 00 00 04
            IL_0009: ldsfld object Library.ABCLock::_syncLock
            // 0x0292: 25
            IL_000e: dup
            // 0x0293: 0B
            IL_000f: stloc.1
            // 0x0294: 12 00
            IL_0010: ldloca.s 0
            // 0x0296: 28 13 00 00 0A
            IL_0012: call void [mscorlib]System.Threading.Monitor::Enter(object, bool&)
            // 0x029B: 7E 02 00 00 04
            IL_0017: ldsfld class Library.ABCLock Library.ABCLock::'instance'
            // 0x02A0: 2D 0A
            IL_001c: brtrue.s IL_0028

            // 0x02A2: 73 03 00 00 06
            IL_001e: newobj instance void Library.ABCLock::.ctor()
            // 0x02A7: 80 02 00 00 04
            IL_0023: stsfld class Library.ABCLock Library.ABCLock::'instance'

            // 0x02AC: DE 0A
            IL_0028: leave.s IL_0034
        } // .try 结束
        finally
        {
            // 0x02AE: 06
            IL_002a: ldloc.0
            // 0x02AF: 2C 06
            IL_002b: brfalse.s IL_0033

            // 0x02B1: 07
            IL_002d: ldloc.1
            // 0x02B2: 28 14 00 00 0A
            IL_002e: call void [mscorlib]System.Threading.Monitor::Exit(object)

            // 0x02B7: DC
            IL_0033: endfinally
        } // 捕捉结束

        // 0x02B8: 7E 02 00 00 04
        IL_0034: ldsfld class Library.ABCLock Library.ABCLock::'instance'
        // 0x02BD: 2A
        IL_0039: ret
    } // 方法 ABCLock::GetInstance 结束

    .method private hidebysig specialname rtspecialname static 
        void .cctor () cil managed 
    {
        // 方法起始 RVA 地址 0x20d0
        // 方法起始地址(相对于文件绝对值:0x02d0)
        // 代码长度 11 (0xb)
        .maxstack 8

        // 0x02D1: 73 12 00 00 0A
        IL_0000: newobj instance void [mscorlib]System.Object::.ctor()
        // 0x02D6: 80 03 00 00 04
        IL_0005: stsfld object Library.ABCLock::_syncLock
        // 0x02DB: 2A
        IL_000a: ret
    } // 方法 ABCLock::.cctor 结束

} // 类 Library.ABCLock 结束

 

 

public class ABCLockVolatile

.class public auto ansi beforefieldinit Library.ABCLockVolatile
    extends [mscorlib]System.Object
{
    // 成员
    .field private static class Library.ABCLockVolatile modreq([mscorlib]System.Runtime.CompilerServices.IsVolatile)  'instance'
    .field private static initonly object _syncLock

    // 方法
    .method private hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // 方法起始 RVA 地址 0x20dc
        // 方法起始地址(相对于文件绝对值:0x02dc)
        // 代码长度 7 (0x7)
        .maxstack 8

        // 0x02DD: 02
        IL_0000: ldarg.0
        // 0x02DE: 28 12 00 00 0A
        IL_0001: call instance void [mscorlib]System.Object::.ctor()
        // 0x02E3: 2A
        IL_0006: ret
    } // 方法 ABCLockVolatile::.ctor 结束

    .method public hidebysig static 
        class Library.ABCLockVolatile GetInstance () cil managed 
    {
        // 方法起始 RVA 地址 0x20e4
        // 方法起始地址(相对于文件绝对值:0x02e4)
        // 代码长度 66 (0x42)
        .maxstack 2
        .locals init (
            [0] bool,
            [1] object
        )

        // 0x02F0: FE 13
        IL_0000: volatile.
        // 0x02F2: 7E 04 00 00 04
        IL_0002: ldsfld class Library.ABCLockVolatile modreq([mscorlib]System.Runtime.CompilerServices.IsVolatile)  Library.ABCLockVolatile::'instance'
        // 0x02F7: 2D 31
        IL_0007: brtrue.s IL_003a

        // 0x02F9: 16
        IL_0009: ldc.i4.0
        // 0x02FA: 0A
        IL_000a: stloc.0
        .try
        {
            // 0x02FB: 7E 05 00 00 04
            IL_000b: ldsfld object Library.ABCLockVolatile::_syncLock
            // 0x0300: 25
            IL_0010: dup
            // 0x0301: 0B
            IL_0011: stloc.1
            // 0x0302: 12 00
            IL_0012: ldloca.s 0
            // 0x0304: 28 13 00 00 0A
            IL_0014: call void [mscorlib]System.Threading.Monitor::Enter(object, bool&)
            // 0x0309: FE 13
            IL_0019: volatile.
            // 0x030B: 7E 04 00 00 04
            IL_001b: ldsfld class Library.ABCLockVolatile modreq([mscorlib]System.Runtime.CompilerServices.IsVolatile)  Library.ABCLockVolatile::'instance'
            // 0x0310: 2D 0C
            IL_0020: brtrue.s IL_002e

            // 0x0312: 73 06 00 00 06
            IL_0022: newobj instance void Library.ABCLockVolatile::.ctor()
            // 0x0317: FE 13
            IL_0027: volatile.
            // 0x0319: 80 04 00 00 04
            IL_0029: stsfld class Library.ABCLockVolatile modreq([mscorlib]System.Runtime.CompilerServices.IsVolatile)  Library.ABCLockVolatile::'instance'

            // 0x031E: DE 0A
            IL_002e: leave.s IL_003a
        } // .try 结束
        finally
        {
            // 0x0320: 06
            IL_0030: ldloc.0
            // 0x0321: 2C 06
            IL_0031: brfalse.s IL_0039

            // 0x0323: 07
            IL_0033: ldloc.1
            // 0x0324: 28 14 00 00 0A
            IL_0034: call void [mscorlib]System.Threading.Monitor::Exit(object)

            // 0x0329: DC
            IL_0039: endfinally
        } // 捕捉结束

        // 0x032A: FE 13
        IL_003a: volatile.
        // 0x032C: 7E 04 00 00 04
        IL_003c: ldsfld class Library.ABCLockVolatile modreq([mscorlib]System.Runtime.CompilerServices.IsVolatile)  Library.ABCLockVolatile::'instance'
        // 0x0331: 2A
        IL_0041: ret
    } // 方法 ABCLockVolatile::GetInstance 结束

    .method private hidebysig specialname rtspecialname static 
        void .cctor () cil managed 
    {
        // 方法起始 RVA 地址 0x2144
        // 方法起始地址(相对于文件绝对值:0x0344)
        // 代码长度 11 (0xb)
        .maxstack 8

        // 0x0345: 73 12 00 00 0A
        IL_0000: newobj instance void [mscorlib]System.Object::.ctor()
        // 0x034A: 80 05 00 00 04
        IL_0005: stsfld object Library.ABCLockVolatile::_syncLock
        // 0x034F: 2A
        IL_000a: ret
    } // 方法 ABCLockVolatile::.cctor 结束

} // 类 Library.ABCLockVolatile 结束

 

public sealed class XYZ

.class public auto ansi sealed beforefieldinit Library.XYZ
    extends [mscorlib]System.Object
{
    // 成员
    .field private static initonly class [mscorlib]System.Lazy`1<class Library.XYZ> 'instance'
    .field private static class [mscorlib]System.Func`1<class Library.XYZ> 'CS$<>9__CachedAnonymousMethodDelegate1'
    .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
        01 00 00 00
    )

    // 方法
    .method private hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // 方法起始 RVA 地址 0x2150
        // 方法起始地址(相对于文件绝对值:0x0350)
        // 代码长度 7 (0x7)
        .maxstack 8

        // 0x0351: 02
        IL_0000: ldarg.0
        // 0x0352: 28 12 00 00 0A
        IL_0001: call instance void [mscorlib]System.Object::.ctor()
        // 0x0357: 2A
        IL_0006: ret
    } // 方法 XYZ::.ctor 结束

    .method public hidebysig static 
        class Library.XYZ GetInstance () cil managed 
    {
        // 方法起始 RVA 地址 0x2158
        // 方法起始地址(相对于文件绝对值:0x0358)
        // 代码长度 11 (0xb)
        .maxstack 8

        // 0x0359: 7E 06 00 00 04
        IL_0000: ldsfld class [mscorlib]System.Lazy`1<class Library.XYZ> Library.XYZ::'instance'
        // 0x035E: 6F 15 00 00 0A
        IL_0005: callvirt instance !0 class [mscorlib]System.Lazy`1<class Library.XYZ>::get_Value()
        // 0x0363: 2A
        IL_000a: ret
    } // 方法 XYZ::GetInstance 结束

    .method private hidebysig specialname rtspecialname static 
        void .cctor () cil managed 
    {
        // 方法起始 RVA 地址 0x216b
        // 方法起始地址(相对于文件绝对值:0x036b)
        // 代码长度 40 (0x28)
        .maxstack 8

        // 0x036C: 7E 07 00 00 04
        IL_0000: ldsfld class [mscorlib]System.Func`1<class Library.XYZ> Library.XYZ::'CS$<>9__CachedAnonymousMethodDelegate1'
        // 0x0371: 2D 11
        IL_0005: brtrue.s IL_0018

        // 0x0373: 14
        IL_0007: ldnull
        // 0x0374: FE 06 0C 00 00 06
        IL_0008: ldftn class Library.XYZ Library.XYZ::'<.cctor>b__0'()
        // 0x037A: 73 17 00 00 0A
        IL_000e: newobj instance void class [mscorlib]System.Func`1<class Library.XYZ>::.ctor(object, native int)
        // 0x037F: 80 07 00 00 04
        IL_0013: stsfld class [mscorlib]System.Func`1<class Library.XYZ> Library.XYZ::'CS$<>9__CachedAnonymousMethodDelegate1'

        // 0x0384: 7E 07 00 00 04
        IL_0018: ldsfld class [mscorlib]System.Func`1<class Library.XYZ> Library.XYZ::'CS$<>9__CachedAnonymousMethodDelegate1'
        // 0x0389: 73 18 00 00 0A
        IL_001d: newobj instance void class [mscorlib]System.Lazy`1<class Library.XYZ>::.ctor(class [mscorlib]System.Func`1<!0>)
        // 0x038E: 80 06 00 00 04
        IL_0022: stsfld class [mscorlib]System.Lazy`1<class Library.XYZ> Library.XYZ::'instance'
        // 0x0393: 2A
        IL_0027: ret
    } // 方法 XYZ::.cctor 结束

    .method private hidebysig static 
        class Library.XYZ '<.cctor>b__0' () cil managed 
    {
        .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
            01 00 00 00
        )
        // 方法起始 RVA 地址 0x2164
        // 方法起始地址(相对于文件绝对值:0x0364)
        // 代码长度 6 (0x6)
        .maxstack 8

        // 0x0365: 73 09 00 00 06
        IL_0000: newobj instance void Library.XYZ::.ctor()
        // 0x036A: 2A
        IL_0005: ret
    } // 方法 XYZ::'<.cctor>b__0' 结束

} // 类 Library.XYZ 结束

 

posted @ 2016-07-27 13:20  茗::流  阅读(135)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。