ThreadManager分析
来源:互联网 发布:log4j json格式化 编辑:程序博客网 时间:2024/06/16 11:17
类图如下:
ThreadManager是采用单例模式创建的:
ThreadManager* ThreadManager::Instance() { RTC_DEFINE_STATIC_LOCAL(ThreadManager, thread_manager, ()); return &thread_manager;}#define RTC_DEFINE_STATIC_LOCAL(type, name, arguments) \ static type& name = *new type arguments
把宏RTC_DEFINE_STATIC_LOCAL展开,实际上为
ThreadManager* ThreadManager::Instance() { static ThreadManager& thread_manager= *new ThreadManager(); return &thread_manager;}
但从代码中可以看出,thread_manager为静态局部变量,它在该函数第一次被调用时进行初始化(在多线程环境下是否会被多次初始化?这个有待商榷)。
ThreadManager管理着每个线程的Thread*对象,保存在线程局部对象中,当Thread ThreadManager::CurrentThread()返回到总是当前线程对应的Thread. 下面看下代码实现:
#if defined(WEBRTC_WIN)ThreadManager::ThreadManager() { key_ = TlsAlloc(); //在ThreadManager构造函数中申请索引#ifndef NO_MAIN_THREAD_WRAPPING WrapCurrentThread();#endif}ThreadManager::~ThreadManager() { UnwrapCurrentThread(); TlsFree(key_);}Thread *ThreadManager::CurrentThread() { return static_cast<Thread *>(TlsGetValue(key_)); //每个线程返回对应的Thread *}void ThreadManager::SetCurrentThread(Thread *thread) { TlsSetValue(key_, thread); //将当前线程的Thread对象指针存入线程局部对象中}#endif
阅读全文
0 0
- ThreadManager分析
- 网络访问频繁的项目---ThreadManager(线程池管理类)
- Java ThreadManager(线程池管理类)-网络频繁访问处理机制
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 大家帮忙分析分析!
- FFMpeg分析详细分析
- FFMpeg分析详细分析
- core 分析的分析
- 写给自己,分析分析
- FFMpeg分析详细分析
- POI实现Excel批量导入数据(SpringMVC)
- makefile eval函数详解
- git 操作
- jquery各个版本下载
- G711 G723 G729线路占多少带宽问题
- ThreadManager分析
- 使用分区(Partitioning)提高Spark的运行性能——Improving Spark Performance With Partitioning
- Thinkphp5.0实战开发------自动生成目录结构
- hust1720-Rent House-2017华科现场赛J题-莫比乌斯反演
- Java中print、printf、println的区别
- Spring3 MVC请求参数获取的几种方法
- 超链接中包含中文的乱码问题
- day6-socket编程-函数
- 处理器拦截器详解—SpringMVC