-
-
线程局部存储TLS的纠结问题
-
发表于:
2012-10-21 21:15
4567
-
看到TLS这一节,没有搞懂。
书上说;
windows为一个进程维护一个位数组,在为进程内的每一个线程分配一个同样长度的数组空间。
一般用主线程使用TlsAlloc得到一个索引 假设为2,再次用TlsAlloc的时候就不会得到2,假如我使用TlsSetValue(2,value)是把value放到这个线程分配到的数组空间的第三个单元么?
如果我有5个线程,只有线程1使用了索引2,其他四个线程没有用到,那不是这四个线程数组中的第3个单元就没有被使用,这不是浪费了么?
说法二;
其实好像TLS分配的类似于一个二维数组thread[0][100],thread[1][100]表示第一行的100个空间给线程1,第二行的100个空间给线程二,TlsAlloc返回的是列号,行号可以由线程自己确定,
。由于TlsAlloc不反回相同的索引, 如果没有被用到,还是浪费了空间啊。
如果我使用了许多个索引,那会浪费大量的空间啊。是我理解错了么
这两个说法是相同的么?
为什么要进程内的每一个线程分配一个同样长度的数组空间。不同长度的可以么?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课