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静态函数的时候,talk_base::ThreadManager就从当前线程的TLS内取出该指针并返回。
&nbs