我自己看TLS好长时间了,就是搞不清楚,希望各位大虾能够赐教!
我有一个问题向不明白,问题如下:
  比如一个进程有10个线程,每个线程有10个槽(slot)。若线程1向进程申请一个索引号,比如是3,进程就会标记3号槽占用,而线程2-9的第3号槽是空的。但是下次如果线程2-10中的某个线程再向进程申请索引号时,因为3号槽进程标记为已占用 ,就不会再分配3。如果这样的话,那么线程2-线程10的第3号槽不就都浪费了么?

解决方案 »

  1.   

    TlsAlloc返回的不是槽号(Slot), 索引号和槽号是两回事情。比如你有五个朋友,到不同洗浴中西洗澡,这个洗浴中心就是索引号,你们五个人每个洗浴存衣服的地方就是那槽。比如明天你们发现了一个新开的洗浴中心想去桑拿,你就用TlsAlloc()得到新洗浴的索引,以后你们五个就可以用这个索引往各自的槽子里面存衣服了。 不是说你们5个每天扛着存衣箱找洗浴。
      

  2.   

    这样说倒是明白了,不过通过索引找自己的(SLOT)是怎么实现的还是不太清楚!
      

  3.   

    就像你和你的朋友们都有名字一样,每个线程也都有它的名字(Thread id), 所以以下程序TlsGetValue(Index)实际上相当于 TlsGetValue(Index,GetCurrentThreadId()),也就相当于:找到我的藏衣柜(联合国洗浴中心,fancyud);