zoukankan      html  css  js  c++  java
  • C#中不需要用锁的线程安全的Singleton设计模式开发者在线 Builder.com.cn 更新时间:20080719作者: 来源:

    C#中不需要用锁的线程安全的Singleton设计模式开发者在线 Builder.com.cn更新时间:2008-07-19作者:来源:本文关键词:C#基础C#Singleton这个优美的Singleton实现基础是.NET对运行期初始化的完整定义。它的优美之处是不需要典型的double-checked locking。
    当CLR加载class Singleton的时候,因为Singleton没有static variables需要被初始化,所以Singleton的初始化其实什么也没做。而对static class LazyHolder来说,直到它被执行的时候才会被初始化。而static class LazyHolder只有载Singleton.GetInstance()被执行的时候才会执行到。当第一次调用GetInstance()的时候 CLR才会加载和初始化LazyHolder这个class。对于LazyHolder class的初始化就是对static variable Instance的初始化。而Instance的初始化就是执行Singleton的private constructor。因为.NET保证class的initialization是serial的,就是说在加载和初始化的过程中我们不需要自己做同步。因为初始化过程是一个serial的操作,所以对于后面的GetInstance,我们不需要做任何同步,它也会返回一个正确初始化的 Singleton对象。
    实现代码:

    public class Singleton
    {
       private static class LazyHolder
        {
         public static readonly Singleton Instance = new Singleton();
        }
       private Singleton()
       {   }
       public static Singleton GetInstance()
        {  return LazyHolder.Instance; }
    }



  • 相关阅读:
    51nod_1445 变色DNA 最短路模板 奇妙思维
    51nod_1459 最短路 dijkstra 特调参数
    UVA_10653 公主与王子 #刘汝佳DP题刷完计划
    HOJ 13819 Height map
    51nod_1255字典序最小的子序列
    电梯设计需求调研报告
    梦断代码读后感
    求一循环数组的最大子数组的和
    求二维数组中最大子数组的和
    四则运算
  • 原文地址:https://www.cnblogs.com/zhiji6/p/1649385.html
Copyright © 2011-2022 走看看