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这一种形式就够了。
上面说了这么多,意思其实就一个,千万别被我绕晕

阅读 4.1k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进