关闭

线程安全的单例模式

标签: 多线程线程安全单例模式
256人阅读 评论(0) 收藏 举报
分类:
把构造函数私有化,对外提供一个静态的成员函数获取对象实例,这是我们对单例模式的最简单印象,但是如果多线程同时获取对象实例的时候,我们首先想到的是加锁
class Singleton  
{  
private:  
    static Singleton* m_instance;  
    Singleton(){}  
public:  
    static Singleton* getInstance();  
};  
    
Singleton* Singleton::getInstance()  
{  
    if(NULL == m_instance)  
    {  
        Lock();
        if(NULL == m_instance)  
        {  
            m_instance = new Singleton;  
        }  
        UnLock();  
    }  
    return m_instance;  
}

加锁其实很影响效率,可以换个方式实现

class SingletonStatic  
{  
private:  
    static const SingletonStatic* m_instance;  
    SingletonStatic(){}  
public:  
    static SingletonStatic* getInstance()  
   {  
        return m_instance;  
   }  
};  
  
//外部初始化
const SingletonStatic* SingletonStatic::m_instance = new SingletonStatic;  
利用全局变量在程序最开始就会被创建的原理,new SingletonStatic就会在多线程获取之前就被创建了。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

高并发下线程安全的单例模式(最全最经典)

在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单...
  • cselmu9
  • cselmu9
  • 2016-05-11 00:32
  • 60301

如何创建线程安全的单例模式?线程安全的Singleton!

单例模式的概念 单例模式就是确保只有一个实例,而且自行实例化并向整个系统传递这个实例,这个类就称作为单例类 单例模式最重要的一个特点就是构造方法私有化。创建单例模式分为懒汉式和饿汉式。 ...
  • a347911
  • a347911
  • 2016-11-24 16:59
  • 1347

设计一个线程安全的单例(Singleton)模式

在设计单例模式的时候,虽然很容易设计出符合单例模式原则的类类型,但是考虑到垃圾回收机制以及线程安全性,需要我们思考的更多。有些设计虽然可以勉强满足项目要求,但是在进行多线程设计的时候。不考虑线程安全性...
  • gggg_ggg
  • gggg_ggg
  • 2015-12-08 09:43
  • 1835

线程安全的饿汉式——单例模式

单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式...
  • bestone0213
  • bestone0213
  • 2014-12-11 09:05
  • 1348

线程安全单例模式(C++)

线程安全单例模式(C++)饿汉模式 饿汉模式:即无论是否调用该类的实例,在程序开始时就会产生一个该类的实例,并在以后仅返回此实例。 由静态初始化实例保证其线程安全性,why?因为静态实例...
  • he_0123
  • he_0123
  • 2016-01-07 07:26
  • 390

单例模式——C++实现线程安全的单例

一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。 需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread ...
  • fu_zk
  • fu_zk
  • 2013-09-22 11:04
  • 20774

设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题

设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题 一:单例模式概念 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类...
  • ly969434341
  • ly969434341
  • 2016-05-10 21:38
  • 2613

C++单例模式(懒汉和饿汉)与线程安全

单例: 单例大约有两种实现方法:懒汉与饿汉。 懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化, 饿汉:饿了肯定要饥不择食。所以在单例类定义的时候就进行...
  • hj605635529
  • hj605635529
  • 2017-04-14 15:56
  • 395

C#中的线程安全单例模式

单 例模式是广为流传的设计模式中的一种。本质上,单例模式是一个只允许创建一个实例,并提供对这个实例简单的访问途径的类。一般而言,单例模式在创建实例时 不允许传递任何参数-否则不同参数导致不同的实例创建...
  • syaguang2006
  • syaguang2006
  • 2014-04-14 09:40
  • 2608

懒汉式单例模式的线程安全问题

新建一个单例模式类和一个多线程测试类 public class Test24 implements Runnable { public void run() { System.out.print...
  • u010584063
  • u010584063
  • 2015-07-11 09:24
  • 3361