线程局部存储区(TLS)-之我见

本文深入探讨了Windows系统中线程局部存储(TLS)的工作机制,包括其核心的数据结构——全局索引数组和线程指针数组,以及TLS的主要函数TlsAlloc、TlsSetValue、TlsGetValue和TlsFree的功能。通过实例,如strtok()多线程版本和GetLastError(),展示了TLS在解决多线程数据隔离问题中的应用。
摘要由CSDN通过智能技术生成

(1)TLS的机制原理

     主要的数据结构就是两个,一个就是进程范围的全局索引数组,再一个就是线程范围的指针数组。这两个数组的大小是一样的,ms保证这两个数组的大小至少为TLS_MINIMUM_AVAILABLE。全局索引数组只是用来保存索引,也就是整型数据,指针数组只是用来保存指针。当某个进程的某个线程需要使用TLS时,就从全局索引数组申请一个索引号,这个索引号在被释放之前就不能被其他线程申请到了。这个索引号一般来都是用进程级别的全局变量来保存的,所以这个索引号对进程中的所有线程都是可见的,可访问的。只要某一个线程申请到了索引号i,那么进程内的所有线程的指针数组的相应位置i就被标记为占用。好了,现在进程中的每个线程就可以使用这个索引号i来向线程的指针数组的第i个位置传递各自所需的数据(实际上是数据指针,这个指针一般指向线程栈而不是全局堆)了,数据传递完毕后,线程就可以用这个索引号i来访问到自己之前设定的数据。也就是说,现在,进程中的所有线程都使用相同的索引号i来访问TLS数据,但却访问的并不是相同的数据,而是各个线程自己设定的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值