全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++实现一个线程安全的单例工厂实现代码

  C++实现一个线程安全的单例工厂实现代码

我们见到经常有人用 static 局部对象的方式实现了类似单例模式,最近发现一篇文章明确写明 编译器在处理  static局部变量的时候 并不是线程安全的 !!!

http://blogs.msdn.com/b/oldnewthing/archive/2004/03/08/85901.aspx    

于是实现了一个单例工厂  并且是线程安全的

#ifndef SINGLETONFACTORY_H 
#define SINGLETONFACTORY_H 
#include "windows.h" 
#include <memory> 
namespace Tools 
{ 
template<class T>class SingletonFactory 
{ 
public: 
  virtual ~SingletonFactory() 
  { 
   ::DeleteCriticalSection(&__criticalSection); 
  } 
  std::auto_ptr<T>& GetInstance(); 
  static SingletonFactory<T>* CreateSingletonFactory(); 
private: 
  SingletonFactory() 
  { 
    ::InitializeCriticalSection(&__criticalSection); 
  } 
  std::auto_ptr<T> __singletonObj; 
  CRITICAL_SECTION __criticalSection; 
}; 
 
//初始化创建 后续在多线程中使用 
//还有另一种写法是单独的函数直接返回内部单例包装静态成员在 多线程情况下不安全 
//SingletonFactory::CreateSingletonFactory().GetInstance(); 
template<class T> SingletonFactory<T>* SingletonFactory<T>::CreateSingletonFactory(){ 
  static SingletonFactory<T> temObj; 
  return &temObj; 
} 
//工厂实例 
template<class T> std::auto_ptr<T>& SingletonFactory<T>::GetInstance() 
{ 
  if(__singletonObj.get()==0) 
  { 
    ::EnterCriticalSection(&__criticalSection); 
    if(__singletonObj.get()==0) 
      __singletonObj=std::auto_ptr<T>(new T); 
    ::LeaveCriticalSection(&__criticalSection); 
  } 
  return __singletonObj; 
} 
} 
 
#endif // SINGLETONFACTORY_H 

测试代码

SingletonFactory<Data1>*singleton1=SingletonFactory<Data1>::CreateSingletonFactory(); 
singleton1->GetInstance()->x=100; 
cout<<singleton1->GetInstance()->x<<endl; 
singleton1->GetInstance()->y=200; 
cout<<singleton1->GetInstance()->x<<endl; 
cout<<singleton1->GetInstance()->y<<endl; 
 
SingletonFactory<Data2>*singleton2=SingletonFactory<Data2>::CreateSingletonFactory(); 
singleton2->GetInstance()->x=100; 
cout<<singleton2->GetInstance()->x<<endl; 
singleton2->GetInstance()->y=200; 
cout<<singleton2->GetInstance()->x<<endl; 
cout<<singleton2->GetInstance()->y<<endl; 

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++线程安全的单例工厂  # C++  # 单例工厂  # 老生常谈C++的单例模式与线程安全单例模式(懒汉/饿汉)  # 从C++单例模式到线程安全详解  # c++实现简单的线程池  # C++程序中启动线程的方法  # C++封装线程类的实现方法  # C++实现多线程查找文件实例  # C++使用CriticalSection实现线程同步实例  # C++ 线程(串行 并行 同步 异步)详解  # 多线程  # 实现了  # 希望能  # 谢谢大家  # 不安全  # 一篇文章  # 有人用  # 情况下  # cpp  # brush  # aspx  # pre  # class  # ifndef  # lt  # memory  # gt  # windows  # SINGLETONFACTORY_H  # define 


相关文章: 已有域名和空间如何搭建网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何确保西部建站助手FTP传输的安全性?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  制作网站公司那家好,网络公司是做什么的?  如何选择CMS系统实现快速建站与SEO优化?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何快速搭建安全的FTP站点?  jQuery 常见小例汇总  建站10G流量真的够用吗?如何应对访问高峰?  建站之星后台管理系统如何操作?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  婚礼视频制作网站,学习*后期制作的网站有哪些?  深圳网站制作案例,网页的相关名词有哪些?  ,怎么在广州志愿者网站注册?  如何快速生成可下载的建站源码工具?  如何通过商城自助建站源码实现零基础高效建站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  高防服务器租用如何选择配置与防御等级?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  网站制作壁纸教程视频,电脑壁纸网站?  如何在Ubuntu系统下快速搭建WordPress个人网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  建站主机如何选?高性价比方案全解析  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  C#如何使用XPathNavigator高效查询XML  头像制作网站在线制作软件,dw网页背景图像怎么设置?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  深入理解Android中的xmlns:tools属性  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  ,南京靠谱的征婚网站?  存储型VPS适合搭建中小型网站吗?  宁波免费建站如何选择可靠模板与平台?  济南网站制作的价格,历城一职专官方网站?  广州建站公司哪家好?十大优质服务商推荐  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何确保FTP站点访问权限与数据传输安全?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  建站主机系统SEO优化与智能配置核心关键词操作指南  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站之星如何快速解决建站难题?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  制作宣传网站的软件,小红书可以宣传网站吗?  公众号网站制作网页,微信公众号怎么制作? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。