TLS 是一个机制,经由它,程序可以拥有全域变量,但处于「每一线程各不相同」的状态
进程中的所有线程都可以拥有全域变量,但这些变量其实是特定对某个线程才有意义
举例:多线程程序,每一个线程都对不同的文件写文件(也因此它们使用不同的文件handle)。tls这种情况下,把每一个线程所使用的文件handle 储存在TLS 中,当线程需要知道所使用的handle,它可以从TLS 获得。tls重点在于:线程用来取得文件handle 的那一段码在任何情况下都是相同的,而从TLS中取出的文件handle 却各不相同
就知道 不同的index 线程对应不同的indent(契约?订货单?)
PJ_DEF(pj_status_t) pj_thread_local_set(long index, void *value){
rc = TlsSetValue(index, value); //可以把数据放配置到的TLS slot ,参数分别是TLS slot index值以及欲写入的数据内容
return rc!=0 ? PJ_SUCCESS : PJ_RETURN_OS_ERROR(GetLastError());
}
上面 其实已经TlsSetValue值和线程index绑定,这里 log_get_raw_indent其实就是根据线程的index取出保存的数据,流程图如下:
static int log_get_raw_indent(void)
{
return (long)(pj_ssize_t)pj_thread_local_get(thread_indent_tls_id);
}
PJ_DEF(void*) pj_thread_local_get(long index)
{
return TlsGetValue(index); //获取之前保存在TLS 数组slot中的数据
}
以上就是线程操作的流程,写的有点乱,需要出一个专题分析
根据上面的Create pjsua
已经分析了Init pjsua data 、set default logging setting、以及init pjlib
后面的初始化,每一个都特别的大,所以这里拆分为9篇文章分析
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-67841-11.html
1%
当然来鬼城的难民是限制条件的
任何东西都要一分为二看问题
现在打我们是鱼
他们了解世界更了解我们大陆