linux下一个C++线程安全的单例模式
来源:互联网 发布:uu淘宝店 编辑:程序博客网 时间:2024/06/03 22:41
#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上提示找不到头文件。
阅读全文
0 0
- linux下一个C++线程安全的单例模式
- 设计模式 - 线程安全的单例模式(C#)
- object-c 单例模式的线程安全
- 线程安全单例模式(C++)
- 线程安全单例模式(C++)
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- Volatile 线程安全的单例模式
- 线程安全的单例模式
- 基于线程安全的单例模式
- 线程安全的单例模式
- 单例模式的线程安全
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- Mac下python路径
- tomcat管理界面登录无法进入
- Tensorflow + ResNet101 + fasterRcnn 训练自己的模型 数据(一)
- python机器学习4-5代码及运行结果
- Eclipse里调出Tomcat server视图
- linux下一个C++线程安全的单例模式
- map函数的应用:UVa156-Ananagrams
- FFmpeg的编译与运行
- python学习刷题
- Android:dimen尺寸资源文件的使用
- 第一次在linux下安装CUDD包及遇见的问题
- ubuntu 17.04 下安装openssh-server报错
- 04Request、Response
- stack实现 括号匹配 51nod 1289 大鱼吃小鱼