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小时内与您取得联系。