跳转至

各种段

TLS

TLS是Thread Local Storage(线程局部存储)的简称,是一项解决多线程内部变量使用问题的技术。用于将某些数据和一特定线程关联起来,即,这些数据为关联线程所独有(私有)。在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 而如果一个变量不想被多个线程共享访问, 那么就应该使用TLS。

TLS使用非常简单, 只要对变量声明时使用__declspec(thread)修饰就可以了。例如: __declspec(thread) int g_nData = 0;

使用

多线程中使用TLS的例子(动态) 相关API Windows TLS的API: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue。(动态TLS)

DWORD TlsAlloc(); //(若要使用动态T L S,首先必须调用TlsAlloc函数)
//这个函数命令系统对进程中的位标志进行扫描,并找出一个FREE标志。然后系统将该标志从FREE改为INUSE,并且TlsAlloc返回位数组中的标志的索引。DLL(或APP)通常将该索引保存在一个全局变量中,因为它的值是每个进程而不是每个线程使用的值。
BOOL TlsSetValue( DWORD dwTlsIndex,PVOID pvTlsValue); //将一个值放入线程的数组中
PVOID TlsGetValue(DWORD dwTlsIndex); //要从线程的数组中检索一个值
BOOL TlsFree(DWORD dwTlsIndex); //当在所有线程中不再需要保留TLS槽时

其他资料

(用到了再看) https://www.52pojie.cn/forum.php?mod=viewthread&tid=208428


评论