singleton懒汉式与饿汉式以及线程安全(双检锁)
来源:互联网 发布:linux运维简历 编辑:程序博客网 时间:2024/06/06 03:23
/*************************************************************************> File Name: Singleton.cpp> Created Time: Tue 31 Oct 2017 10:20:58 PM CST ************************************************************************/#include <iostream>using namespace std;#include <pthread.h>//懒汉式 (创建的时候采取new实例)以时间换取空间,线程不安全class singleton_L{ public: static singleton_L* getinstance() { if(instance == NULL) { instance = new singleton_L(); } return instance; } ~singleton_L() { if(instance != NULL) { delete instance; instance = NULL; } } private: singleton_L(){} static singleton_L* instance;};singleton_L* singleton_L::instance = NULL;//饿汉式(在定义实例的时候就去new对象)以空间换时间class singleton_E{ public: static singleton_E* getinstance() { return instance; } private: singleton_E(){} static singleton_E* instance;};singleton_E* singleton_E::instance = new singleton_E();//懒汉式 线程安全式(双检锁)/* 所谓双重检查加锁机制,指的是:并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法过后,先检查实例是否存在,如果不存在才进入下面的同步块,这是第一重检查。进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。*/class singleton_L_Lock{ public: static singleton_L_Lock* getinstance() { if(instance == NULL) { pthread_mutex_lock(&mutex); if(instance == NULL) instance = new singleton_L_Lock(); pthread_mutex_unlock(&mutex); } return instance; } ~singleton_L_Lock() { if(instance != NULL) { delete instance; instance = NULL; } } public: static pthread_mutex_t mutex; private: singleton_L_Lock() { pthread_mutex_init(&mutex, NULL); } private: static singleton_L_Lock* instance;};singleton_L_Lock* singleton_L_Lock::instance = NULL;pthread_mutex_t singleton_L_Lock::mutex; int main(){ singleton_L* p = singleton_L::getinstance(); singleton_L* p1 = singleton_L::getinstance(); singleton_L* p2 = singleton_L::getinstance(); cout << p << endl; cout << p1 << endl; cout << p2 << endl; cout << "=================" << endl; singleton_E* E = singleton_E::getinstance(); singleton_E* E1 = singleton_E::getinstance(); singleton_E* E2 = singleton_E::getinstance(); cout << E << endl; cout << E1 << endl; cout << E2 << endl; cout << "=================" << endl; singleton_L_Lock* L = singleton_L_Lock::getinstance(); singleton_L_Lock* L1 = singleton_L_Lock::getinstance(); singleton_L_Lock* L2 = singleton_L_Lock::getinstance(); cout << L << endl; cout << L1 << endl; cout << L2 << endl; return 0;}
阅读全文
0 0
- singleton懒汉式与饿汉式以及线程安全(双检锁)
- singleton的饿汉式,懒汉式及关于双检锁的线程安全模式
- Singleton饿汉式与懒汉式
- 线程安全与Singleton
- 懒汉式的线程安全
- 设计模式 Singleton 单例 懒汉,线程安全
- 饿汉式、懒汉式singleton模式
- 单例Singleton的“懒汉式”与“饿汉式”实现方法
- 单例模式--饿汉式、懒汉式、线程安全的懒汉式、高性能安全的懒汉式
- singleton单例-饿汉式|懒汉式
- 黑马程序员———单例设计模式-懒汉式关于线程安全以及要点
- 简单java单例模式 懒汉式、饿汉式以及解决线程安全问题(synchronized)
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- C++单例模式(懒汉和饿汉)与线程安全
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- C++实现一个线程安全且高效单例类。(懒汉与饿汉)
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
- BZOJ1163: [Baltic2008]Mafia
- [UnityShader基础]Tags标签
- class file editor:source not found 个人心得
- gulp常用
- java 限流策略
- singleton懒汉式与饿汉式以及线程安全(双检锁)
- java资源大全(转载)
- JQuery
- React Native布局水平和竖直折行
- NOIP模拟(10.31)T2 朋友 (bzoj2143 飞飞侠)
- 简单程控keithly2400万用表(MFC)
- angular1.x 实现表格的增删改查
- 从上海医保聊一聊大公司的一种病
- [UnityShader基础]LOD