muduo库源码学习(base)ThreadLocal
来源:互联网 发布:plc与单片机的3000介绍 编辑:程序博客网 时间:2024/06/05 20:08
// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (chenshuo at chenshuo dot com)#ifndef MUDUO_BASE_THREADLOCAL_H#define MUDUO_BASE_THREADLOCAL_H#include <muduo/base/Mutex.h> // MCHECK#include <muduo/base/noncopyable.h>#include <pthread.h>namespace muduo{template<typename T>class ThreadLocal : noncopyable{ public: ThreadLocal() { MCHECK(pthread_key_create(&pkey_, &ThreadLocal::destructor));//系统调用这个回调函数 } ~ThreadLocal() { MCHECK(pthread_key_delete(pkey_));//只是从线程里删除key } T& value() { T* perThreadValue = static_cast<T*>(pthread_getspecific(pkey_)); if (!perThreadValue) { T* newObj = new T(); MCHECK(pthread_setspecific(pkey_, newObj)); perThreadValue = newObj; } return *perThreadValue; } private: static void destructor(void *x)//静态函数。线程结束时,系统调用它(不是public函数!)删除 { T* obj = static_cast<T*>(x);//如果没有调用value()呢? typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1];//T_must_be_complete_type现在是个类型,char[10] T_must_be_complete_type dummy; (void) dummy; delete obj; } private: pthread_key_t pkey_;//线程局部对象依靠这个key得到对象};}#endif
阅读全文
0 0
- muduo库源码学习(base)ThreadLocal
- muduo库源码学习(base)Atomic
- muduo库源码学习(base)AsyncLogging
- muduo库源码学习(base)Condition
- muduo库源码学习(base)CountDownLatch
- muduo库源码学习(base)Date
- muduo库源码学习(base)Exception
- muduo库源码学习(base)FileUtil
- muduo库源码学习(base)mutex
- muduo库源码学习(base)singleton
- muduo库源码学习(base)ThreadLocalSingleton
- muduo库源码学习(base):Logfile
- muduo库源码学习(base):LogStream
- muduo库源码学习(base):WeakCallback
- muduo源码学习(10)-ThreadLocal
- muduo库源码学习(base)BlockingQueue和BoundBlockingQueue
- muduo库源码学习(base)Thread和CurrentThread
- [Muduo网络库源码分析] (10) base/ThreadPoll_cc_h_线程池
- HYSBZ
- C 语言指针怎么理解?
- HTML5上传图片前实现预览(超简单)
- java基础[10]-函数式编程及Lambda
- MySQL 学习教程(三)【整理】-列类型( 数值型/ 日期时间型/ 字符串型)
- muduo库源码学习(base)ThreadLocal
- 神经网络简单实现和公式推导
- DirectX11笔记(三)--Direct3D初始化2
- 在ASP.NET MVC(Razor)中使用avalon2.x,@字符冲突的不靠谱解决方案
- 【1701H1】【穆晨】【171104】连续第二十五天总结2
- Java编程思想第四版第二章练习
- python面向对象初探
- One Person Game ZOJ
- 改写一个sql server 的过程,增加参数,屡试多次才成功