低锁单例模式D语言实现

需求:

    线程安全

    懒惰模式(也有翻译为懒汉模式,即:只有在用的时候才实例化)

    最小开销(没有每次调用都要加同步锁的开销)

    没有内存模型依赖(没有双检测锁问题,在某些情况下下等到未初始化的对象的错误)

class MySingleton
{
    private this() {}
 
    // 检查是否已经实例化的线程本地变量
    // Thread local
    private static bool instantiated_;
 
    // Thread global
    private __gshared MySingleton instance_;
 
    static MySingleton get()
    {
        if (!instantiated_)
        {
            synchronized(MySingleton.classinfo)
            {
                if (!instance_)
                {
                    instance_ = new MySingleton();
                }
 
                instantiated_ = true;
            }
        }
 
        return instance_;
    }
}


多线程环境下,此版本已经是保证正确且最优化的实现

你可能感兴趣的:(local,private,检测,模型)