Muduo库源码分析(9):线程特定数据
来源:互联网 发布:数据洪流 编辑:程序博客网 时间:2024/05/16 05:39
- 线程私有数据
这些数据不会因为多进程共享数据而影响,因为是每个线程特有的数据。 线程私有数据实现
对于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_;// 键值};
阅读全文
0 0
- Muduo库源码分析(9):线程特定数据
- muduo源码分析:线程特定/私有数据类ThreadLocal
- muduo网络库源码学习————线程特定数据
- muduo库源码分析(4):线程类
- Muduo库源码分析(7):线程池
- muduo网络库学习笔记(7):线程特定数据
- muduo库源码分析
- muduo源码分析--数据发送
- [Muduo网络库源码分析] (10) base/ThreadPoll_cc_h_线程池
- [Muduo网络库源码分析] (9) base/Thread.cc_h_CurrentThread_h线程对象
- muduo源码分析--buffer中的线程安全
- muduo源码分析:线程类Thread封装
- muduo源码分析:线程池类ThreadPool
- muduo源码分析之多线程TcpServer
- muduo源码分析--线程池的实现
- muduo源码分析--数据在muduo中的旅程
- muduo源码分析之TcpConnection发送数据
- Muduo网络库源码分析(三)线程间使用eventfd通信和EventLoop::runInLoop系列函数
- B. Petya and Staircases----思维题
- e.target和e.currentarget还有this的区别
- leetcode--Reorder List
- PHP 常量
- 新浪微博开放平台 PHP 与 OAuth 接口
- Muduo库源码分析(9):线程特定数据
- 教你怎么免费获取比特币(1)
- mybatis-generator 代码自动生成工具
- 栈帧
- nginx reverse proxy
- 部分A+B (15)
- day21(Reader,Writer)
- leetcode--Binary Tree Preorder Traversal
- socket编程(TCP单进程客户服务器通信)