linux下一个C++线程安全的单例模式
2017-09-09 11:06
260 查看
#include <iostream> #include <stdio.h> #include <pthread.h>//pthread.h是在linux编程环境下才有的,以至于在visual studio 2010上提示找不到头文件 using namespace std; class Singleton { private: static Singleton* m_instance; static pthread_mutex_t mutex; Singleton() {} public: static Singleton* getInstance();//单例模式中只有getInstance()方法才是public的,互斥锁mutex,构造函数,单例变量都应该是private的 }; Singleton* Singleton::m_instance=NULL;//注意static变量,static函数只能调用static变量,所以mutex,m_instance都应该是static成员,并且static非const成员不可在类内定义,需要在全局变量中声明,不然棕色会提示 undefined reference to pthread_mutex_t Singleton::mutex; Singleton* Singleton::getInstance(){ if(m_instance==NULL){ pthread_mutex_lock(&mutex);//为保证线程安全,需要双重锁的机制实现 if(m_instance==NULL){ m_instance=new Singleton(); } pthread_mutex_unlock(&mutex); } return m_instance; }; int main(){ Singleton *s1=Singleton::getInstance(); Singleton *s2=Singleton::getInstance(); if(s1==s2){ cout<<"s1==s2"<<endl; }else{ cout<<"s1!=s1"<<endl; } return 0; }
一个线程安全的C++单例模式
注意事项:
1.单例模式中只有getInstance()方法才是public的,互斥锁mutex,构造函数,单例变量都应该是private的。
2.注意static变量,static函数只能调用static变量,所以mutex,m_instance都应该是static成员,并且static非const成员不可在类内定义,需要在全局变量中声明,不然棕色会提示 undefined reference to
3.为保证线程安全,需要双重锁的机制实现。
4.头文件中的pthread.h是在linux编程环境下才有的,以至于在visual studio 2010上提示找不到头文件。
相关文章推荐
- 浅析单例模式与线程安全(Linux环境c++版本)
- 单例模式——C++实现线程安全的单例
- Observer模式Linux下的C++实现
- C++ 线程安全的单例模式(转)
- 单例模式——C++实现线程安全的单例
- C++线程安全的单例模式
- C++单例模式以及线程安全
- C++与Java在线程安全的懒汉式单例模式上的差异
- linux下C++线程安全对象之互斥锁的应用
- 从C++单例模式到线程安全
- C++ 线程安全的单例模式
- C++单例模式以及线程安全
- C++中的单例模式(懒汉模式、饿汉模式及线程安全问题)
- C++线程安全的单例模式
- C++线程安全的单例模式
- 【转】C++ 线程安全的单例模式
- C++ 线程安全的单例模式
- 单例模式——C++实现线程安全的单例
- C++单例模式(懒汉和饿汉)与线程安全
- 单例模式——C++实现线程安全的单例