首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

同一过程中的所有线程又只能使用同一个索引?与前面的话不矛盾吗?

2013-02-19 
同一进程中的所有线程又只能使用同一个索引??????与前面的话不矛盾吗?????在这里有一个线程局部存储器(Tls

同一进程中的所有线程又只能使用同一个索引??????与前面的话不矛盾吗?????
同一过程中的所有线程又只能使用同一个索引?与前面的话不矛盾吗?

在这里有一个线程局部存储器(Tls),我们大概了解一下,系统为进行中的每个线程维护了一个数组,但同一进程中的所有线程又只能使用同一个索引(就是我们在图中看到的__tlsindex),可以通过TlsSetValue向其中存放一个指针,通过TlsGetValue获取该存放的指针。



[解决办法]
是这样的,每个线程有自己的TLS,比如是一个数组 int tls[200],这个数组是在线程私有的TEB上.你有20个线程,每个线程都一个这种数组.然后现在有一个全局索引值gIndex = 0.假设现在这些数组都还未被使用.你调用TlsAlloc,分配到的是索引是0,然后gIndex++.你在调用TlsAlloc就是1.虽然数据都是线程私有的,但是索引是公有的一个.
[解决办法]
楼主,我们反过来理解吧。
如果不是这样设计的话,那么进程一旦结束,它如何回收所开启线程的全部资源呢?

热点排行