开发者社区 问答 正文

windows线程本地存储__declspec (thread) 语法问题

Microsoft对C的扩充功能使这件工作更加容易。只要在要对每个线程都保留不同内容的变量前加上__declspec
(thread)就好了。比如要定义全局静态变量,则为:

__declspec (thread) int iGlobal = 1 ;

而要定义函数内部的静态变量,则为:

__declspec (thread) static int iLocal = 2 ;

我很疑惑既然是线程本地存储,就说明这个变量是线程私有的,也就是只有定义这个变量的线程才能用,那为什么__declspec (thread) 还可以让变量成为全局静态变量?难不成这个变量还能给别的线程用?这样的话不就不是TLS了么?还是说这个全局变量虽然是全局的,但只能给本线程使用?但是无论是我说的哪种情况,我认为只要加上static的这个版本也就是__declspec (thread) static这一种形式就够了。
上面说了这么多,意思其实就一个,千万别被我绕晕

展开
收起
杨冬芳 2016-05-30 19:14:28 2628 分享 版权
1 条回答
写回答
取消 提交回答
  • IT从业

    __declspec (thread) int iGlobal = 1 ;这是线程局部变量
    __declspec (thread) static int iLocal = 2 ;这是线程局部静态变量,也就是TLS
    书错了

    2019-07-17 19:20:59
    赞同 展开评论