TlsAlloc函数分配线程本地存储(TLS)索引。该进程的任何线程随后可以使用此索引来存储和检索线程本地的值。
DWORD TlsAlloc(VOID)
参数
此函数无参数。
返回值
如果函数成功,则返回值为TLS索引。
如果函数失败,返回值为0xFFFFFFFF。要获取扩展错误信息,请调用GetLastError.
备注
进程的线程可以在后续调用TlsFree,TlsSetValue或TlsGetValue函数中使用TLS索引。
TLS索引通常在进程或动态链接库(DLL)初始化期间分配。一旦分配,进程的每个线程可以使用TLS索引来访问其自己的TLS存储槽。要在其插槽中存储值,线程将在调用TlsSetValue中指定索引。线程在后续调用TlsGetValue中指定相同的索引,以检索存储的值。
常量TLS_MINIMUM_AVAILABLE定义每个进程中可用的TLS索引的最小数量。对于所有系统,此最小值至少为64。
TLS索引在进程边界之间无效。一个DLL不能假定在一个进程中分配的索引在另一个进程中有效。
DLL可能使用TlsAlloc,TlsSetValue,TlsGetValue和TlsFree,如下所示:
1.当DLL附加到进程时,DLL使用TlsAlloc分配一个TLS索引。然后,DLL会分配一些动态存储,并在调用TlsSetValue中使用TLS索引将该地址存储在TLS插槽中。这完成了进程的初始线程的每线程初始化。TLS索引存储在DLL的全局或静态变量中。
2.每当DLL连接到进程的新线程时,DLL为新线程分配一些动态存储,并在调用TlsSetValue中使用TLS索引将该地址存储在TLS插槽中。最后,针对新线程的每线程初始化结束。
3.每个时间一个初始化的线程进行一个需要动态存储中的数据的DLL调用,DLL在调用TlsGetValue时使用TLS索引来检索该线程的动态存储的地址。
有关线程本地存储的其他信息,请参阅线程本地存储.
也可以看看