孤云出岫,去留一无所系;朗镜悬空,静躁两不相干。

线程局部存储

     窗口附加字节(window extra bytes)通过使用SetWindowWord和SetWindowLong函数来将数据与一个指定的窗口关联起来。

可以使用TLS将数据与一个正在执行的指定线程关联起来(例如我们可以将创建线程的时间与线程关联起来);然后当线程结束的时候可以知道线程的运行的时间。

     c/c++运行库使用了TLS.

     动态TLS:四个使用函数TlsAlloc,TlsSetValue,TlsGetValue,TlsFree.Microsoft保证至少有TLS_MINMUM_AVAILABLE(在WinNT.h中被定义为64)标志可供使用,每个标志可以被设为FREE,INUSE;TlsSetValue(没有进行错误检测)不会修改另一个线程的TLS.

     静态TLS:_declspec(thread) DWORD gt_dwStartTime = 0;_declspec(thread)声明的变量必须是全局变量或静态变量。编译器在编译时会将所有的tls变量放到它们的.tls段中,连接器会将所有对象模块的.ls合并成一个大的。进程创建一个新线程时,系统会自动分配另一块内存来保存新线程的静态TLS变量.当我们通过LoadLibrary(Ex)来链接一个包含静态TLS的DLL时为了给新的DLL提供它需要的额外TLS内存,系统必须查看进程中所有已有的线程,并口扩大它们的TLS内存块。当FreeLibrary时那么与进程中的每个线程相关联的内存块也被相应的缩减。

阅读更多
个人分类: 读书笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭