C++简洁实现线程安全单例类
来源:互联网 发布:杭州树熊网络怎么样 编辑:程序博客网 时间:2024/05/17 08:08
关于单例模式这里不再多说了,网上很多例子。这里实现一个很通用的,线程安全的单例类,具体应用场景如:线程池的任务队列,epoll事件框架类等。
#define DISABLE_COPY_AND_ASSIGN(T) \ T(const T &); \ T& operator=(const T &) struct Recursive {};class Mutex { public: Mutex() { pthread_mutex_init(&_mutex, NULL); } explicit Mutex(Recursive) { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); pthread_mutex_init(&_mutex, &attr); pthread_mutexattr_destroy(&attr); } ~Mutex() { pthread_mutex_destroy(&_mutex); } int lock() { return pthread_mutex_lock(&_mutex); } int trylock() { return pthread_mutex_trylock(&_mutex); } int unlock() { return pthread_mutex_unlock(&_mutex); } private: pthread_mutex_t _mutex; // RAII class should not be able to be copied DISABLE_COPY_AND_ASSIGN(Mutex); }; template <class T> class AutoLock { public: explicit AutoLock(T* t) : _t(t) { _t.lock(); } ~AutoLock() { _t.unlock(); } private: T* _t; // RAII class should not be able to be copied DISABLE_COPY_AND_ASSIGN(AutoLock); }; class Queue { public: static Queue& instance() { static Queue instance; // it's only construct once when using Queue::instance() return instance; } Request* fetch() { AutoLock<Mutex> autolock(&_lock); //TODO } void add(Item* ite_) { AutoLock<Mutex> autolock(&_lock); //TODO } private: Queue(); ~Queue(); Mutex _lock; DISABLE_COPY_AND_ASSIGN(Queue); }; // using method void foo (void) { Queue::instance().fetch(); ... ... Queue::instance().add(...); }
0 0
- C++简洁实现线程安全单例类
- JAVA单例类的线程安全最简洁有效的写法
- JAVA单例类的线程安全最简洁有效的写法
- C++实现线程安全单例类
- 线程安全C/C++
- 线程安全C/C++
- linux多线程编程(C):信号量实现的线程安全队列
- linux多线程编程(C):互斥量实现的线程安全队列
- Vector实现线程安全
- 线程安全实现方案
- 如何实现线程安全?
- JAVA实现线程安全
- 实现Java线程安全
- 【C/C++】什么是线程安全
- C runtime lib 线程安全
- C/C++ 线程安全队列
- ConcurrentHashMap线程安全的实现
- python实现线程安全队列
- 在UBUNTU的Gedit中,如何显示空格和换行符
- ActionScript3游戏中的图像编程(连载五)
- JSP基础
- win 线程生亡
- django schema migration
- C++简洁实现线程安全单例类
- 树莓派config配置详情
- 关于Android编译非device目录下复制文件
- 12.1 Jump Game
- Remove Duplicates from Sorted Array II
- Java Web开发中路径问题小结
- poj 2299 Ultra-QuickSort 归并排序 线段树
- POJ 3691 DNA repair
- indexOf(String.indexOf 方法)