Muduo库源码分析(9):线程特定数据
2017-08-08 12:48
218 查看
线程私有数据
这些数据不会因为多进程共享数据而影响,因为是每个线程特有的数据。
线程私有数据实现
对于POD类型可以使用__thread来修饰(详解见Thread类封装)
http://blog.csdn.net/jacktangj/article/details/76222350
非POD类型可以使用线程特定数据封装
线程特定数据讲解:
http://www.cnblogs.com/javawebsoa/archive/2013/08/09/3249130.html
这些数据不会因为多进程共享数据而影响,因为是每个线程特有的数据。
线程私有数据实现
对于POD类型可以使用__thread来修饰(详解见Thread类封装)
http://blog.csdn.net/jacktangj/article/details/76222350
非POD类型可以使用线程特定数据封装
线程特定数据讲解:
http://www.cnblogs.com/javawebsoa/archive/2013/08/09/3249130.html
template<typename T> class ThreadLocal : noncopyable { public: ThreadLocal() { // 创建键值数据,数据的销毁由destructor执行,数据空间通过malloc分配,属于堆数据,所以要delete MCHECK(pthread_key_create(&pkey_, &ThreadLocal::destructor)); } ~ThreadLocal() { // 删除键 MCHECK(pthread_key_delete(pkey_)); } // 线程特定数据 T& value() { // 获取线程特定数据,如果没有数据关联到该键返回值为NULL T* perThreadValue = static_cast<T*>(pthread_getspecific(pkey_)); // 没有关联数据,在内存申请一块与key关联 if (!perThreadValue) { T* newObj = new T(); MCHECK(pthread_setspecific(pkey_, newObj)); perThreadValue = newObj; } return *perThreadValue; } private: static void destructor(void *x) { // 销毁键指向的数据的内存空间 T* obj = static_cast<T*>(x); typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1]; T_must_be_complete_type dummy; (void) dummy; delete obj; } private: pthread_key_t pkey_;// 键值 };
相关文章推荐
- muduo网络库源码学习————线程特定数据
- muduo源码分析:线程特定/私有数据类ThreadLocal
- Android应用程序启动Binder线程源码分析
- spark1.2.0源码分析之ShuffledRDD抓取数据
- 第二人生的源码分析(四十六)获取纹理图片的线程
- spark1.2.0源码分析之spark streaming保存数据
- Guava缓存器源码分析——数据加载
- 2018python数据分析与机器学习实战(视频+源码+课件)
- Android源码分析:AudioFlinger中的线程
- memcache 线程深入理解分析 及 源码研究
- 数据结构与算法学习(二)链式存储结构LinkedList源码分析
- 开源JAVA爬虫crawler4j源码分析 - 3 线程管理
- Kettle7 ( Pentaho Data Integration )源码分析 每个step都有一个线程负责运行
- lua 源码分析之线程对象lua_State
- solr dataimport 数据导入源码分析 补充
- 线程特定数据TSD及其实现原理
- [Java数据结构]从源码分析HashMap
- mongodb源码分析(十二)数据的更新
- Memcached源码分析之线程模型
- solr源码分析--数据类型