【设计模式】C++中的单例模式
2015-06-28 11:44
459 查看
讲解来自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4281275&uid=26611383
由于使用了POSIX函数,所以下面的代码只能运行在*NIX系统中。
刚发现C++11提供了mutex关键字,所以我们有了可移植版本:
参考资料:
http://blog.poxiao.me/p/multi-threading-in-cpp11-part-2-mutex-and-lock/#C++11%E4%B9%8B%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0%E7%9B%AE%E5%BD%95
其他非常有价值的资料:
1. http://liyuanlife.com/blog/2015/01/31/thread-safe-singleton-in-cxx/
2. https://github.com/chenshuo/muduo/blob/master/muduo/base/Singleton.h
3. http://www.cnblogs.com/loveis715/archive/2012/07/18/2598409.html
由于使用了POSIX函数,所以下面的代码只能运行在*NIX系统中。
#include<pthread.h> #include<stdio.h> template <typename T> class Singleton { public: static T& GetInstance() { if (value_ == NULL) { pthread_mutex_lock(&thread_lock_); if (value_ == NULL) { T* temp = new T(); value_ = temp; atexit(Destroy); } pthread_mutex_unlock(&thread_lock_); } return *value_; } private: Singleton(); ~Singleton(); Singleton(const Singleton& rhs); Singleton& operator=(const Singleton& rhs); void Destroy() { if (value_ == NULL) { delete value_; value_ = NULL; } } private: static pthread_mutex_t thread_lock_; static T* value_; }; template<typename T> pthread_mutex_t Singleton<T>::thread_lock_ = PTHREAD_MUTEX_INITIALIZER; template<typename T> T* Singleton<T>::value_ = NULL;
刚发现C++11提供了mutex关键字,所以我们有了可移植版本:
template <typename T> class Singleton { public: static T& GetInstance() { if (value_ == NULL) { std::lock_guard<std::mutex> lck(mt); if (value_ == NULL) { T* temp = new T(); value_ = temp; atexit(Destroy); } } return *value_; } private: Singleton(); ~Singleton(); Singleton(const Singleton& rhs); Singleton& operator=(const Singleton& rhs); void Destroy() { if (value_ == NULL) { delete value_; value_ = NULL; } } private: static std::<mutex> mt; static T* value_; }; template<typename T> T* Singleton<T>::value_ = NULL;
参考资料:
http://blog.poxiao.me/p/multi-threading-in-cpp11-part-2-mutex-and-lock/#C++11%E4%B9%8B%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97%E6%96%87%E7%AB%A0%E7%9B%AE%E5%BD%95
其他非常有价值的资料:
1. http://liyuanlife.com/blog/2015/01/31/thread-safe-singleton-in-cxx/
2. https://github.com/chenshuo/muduo/blob/master/muduo/base/Singleton.h
3. http://www.cnblogs.com/loveis715/archive/2012/07/18/2598409.html
相关文章推荐
- 有一行电文,已按下面规律译成密码
- c语言常见函数自编写
- 有一篇文章,共有3行文字,每行有10个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格及其它字符的个数
- C/C++ sort函数的用法
- 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
- 将一个数组中的值按逆序重新存放。
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
- Eclipse+CDT+MinGw进行C&C++开发
- 文章标题
- C++ MPICH
- C++学习备忘录=>持续更新
- C++继承、虚继承、虚函数类的大小问题
- YTU 2387计算时间差【C++】
- C语言中#include用法
- c++的三种指针
- c++容器使用总结(转载)
- double类型引发的问题
- C语言堆和堆栈
- C++创建对象的两种方法
- 大话设计模式C++版——观察者模式