WebRTC源代码探索之旅——多线程篇(6 - 1)

本文详细介绍了WebRTC中多线程的实现,重点关注talk_base::ThreadManager类,它是如何利用TLS在线程间保存和获取线程对象的。此外,还讨论了Talk_base::Runnable接口,允许自定义线程行为。
摘要由CSDN通过智能技术生成

6 thread

 

thread.h/thread.cc文件实现了WebRTC对系统线程的封装。它主要包括3个类talk_base::ThreadManager类、talk_base::Thread类和talk_base::Runnalbe类;以及几个工具类talk_base::AutoThread类、talk_base::ComThread类和talk_base::SocketServerScope类。

 

6.1 talk_base::ThreadManager

 

talk_base::ThreadManager类虽然比较复杂,但是它实现的功能还是比较简单的——帮助talk_base::Thread类实现talk_base::Thread::Current静态函数功能。talk_base::Thread::Current静态函数的主要功能就是获取代表当前线程的talk_base::Thread实例。这就要求在创建系统线程的同时能够立即将它自动封装成talk_base::Thread并加以合理地保存。这就是talk_base::ThreadManager的主要功能。

 

talk_base::ThreadManager的主要组件包括:

key_:系统TLS(Thread LocalStorage)的key。在Windows系统上它是一个DWORD变量,在Linux系统上它被定义为pthread_key_t。

TLS能够在线程空间内保存一些数据,所有的线程通过它只能访问到自己线程空间的变量,各个线程之间互不影响。它也是一个重要的多线程编程的工具。到这里talk_base::ThreadManager的基本原理其实已经可以猜得出来了,其实talk_base::ThreadManager就是将封装线程的talk_base::Thread类的实例指针存放在TLS内。线程内运行的代码在调用talk_base::Thread::Current静态函数的时候,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值