如何详细解析C语言中实现线程安全的单例模式?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1505个文字,预计阅读时间需要7分钟。
在特定应用环境下,一个类只允许存在一个实例,这就是著名的单例模式。单例模式分为懒汉式和饿汉式两种。以下是饿汉式单例模式的实现和正解:
cpptemplate class singleton{protected: singleton() {} ~singleton() {} singleton(const singleton&)=delete; singleton& operator=(const singleton&)=delete;};
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。
首先给出饿汉模式的实现
正解:
template <class T> class singleton { protected: singleton(){}; private: singleton(const singleton&){};//禁止拷贝 singleton& operator=(const singleton&){};//禁止赋值 static T* m_instance; public: static T* GetInstance(); }; template <class T> T* singleton<T>::GetInstance() { return m_instance; } template <class T>
在实例化m_instance 变量时,直接调用类的构造函数。顾名思义,在还未使用变量时,已经对m_instance进行赋值,就像很饥饿的感觉。这种模式,在多线程环境下肯定是线程安全的,因为不存在多线程实例化的问题。
本文共计1505个文字,预计阅读时间需要7分钟。
在特定应用环境下,一个类只允许存在一个实例,这就是著名的单例模式。单例模式分为懒汉式和饿汉式两种。以下是饿汉式单例模式的实现和正解:
cpptemplate class singleton{protected: singleton() {} ~singleton() {} singleton(const singleton&)=delete; singleton& operator=(const singleton&)=delete;};
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。
首先给出饿汉模式的实现
正解:
template <class T> class singleton { protected: singleton(){}; private: singleton(const singleton&){};//禁止拷贝 singleton& operator=(const singleton&){};//禁止赋值 static T* m_instance; public: static T* GetInstance(); }; template <class T> T* singleton<T>::GetInstance() { return m_instance; } template <class T>
在实例化m_instance 变量时,直接调用类的构造函数。顾名思义,在还未使用变量时,已经对m_instance进行赋值,就像很饥饿的感觉。这种模式,在多线程环境下肯定是线程安全的,因为不存在多线程实例化的问题。

