TLS问题

zjsfighter 2009-08-18 01:06:01
TLS有什么用,他是创建全局变量和静态变量的一个副本,那这完全可以用局部变量来完成,如:
DWORD dwTls=8;
DWORD WINAPI Thread(PVOID pParam)
{
DWORD dwIndex=TlsAlloc();
TlsSetValue(dwIndex,pParam); // 这二句可以换成DWORD dwAb=*(PDWORD)pParam;
. // 下面的变量访问第一种用TlsGetValue(),第二种直接用dwAby就行了
. // 而且直接用dwAb的效率更高
.
.
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread=CreateThread(NULL,0,Thread,&dwTls,0,NULL);
.
.
.
.
}
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jameshooo 2009-08-18
  • 打赏
  • 举报
回复
只有TlsAlloc分配的索引共用,在里面分配的变量是每个线程有一个独立的变量,虽然变量名称相同,但是每个线程中该变量的值完全独立,就像是线程的私有局部变量一样。
zjsfighter 2009-08-18
  • 打赏
  • 举报
回复
但这不是还是可以用局部变量来直接替换完成吗?还有TLS是进程中线程共用呢还是每个线程都有一个?
FirryHere 2009-08-18
  • 打赏
  • 举报
回复
TLS其实,是看起来像全局变量的局部变量,比如errorno,因为在使用多线程编程时,全局变量的访问,要有共享冲突问题;而且一个线程修改了,会影响全局,这样不好,比如一个线程发生了错误,修改了errorno,但是其他线程并没有发生错误,这样该errorno应该只是发生错误线程的状态才合理。TLS由此产生。一般人们用二维表来理解这个TLS。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧