局部 static
变量是自动线程局部的,还是它们在线程之间共享?
void f() {
static int x; // <-- need explicit _Thread_local ?
}
最佳答案
在 C 语言规范承认线程或对线程有任何支持之前, block 作用域变量有 static
,更不用说 _Thread_local
了。在这种情况下,当不与 _Thread_local
结合时,它指定静态存储持续时间,这意味着变量在程序执行开始时就存在(好像)并且存在并且在整个程序运行期间保持其最后存储的值。具有静态存储持续时间的对象由所有线程共享。
另一方面,_Thread_local
总是指定线程存储持续时间,这意味着如此声明的对象存在并在线程的整个生命周期内保持其最后存储的值线程,并且声明的标识符在每个线程中指定一个不同的对象。当一个对象在 block 范围内声明为 _Thread_local
时,它还必须带有 extern
或 static
限定符,以传达其链接 -- 外部或无。
extern
在 block 范围内任何类型的声明都是不常见的,但它们偶尔会起到有用的作用。不过,大多数时候,static _Thread_local
是您需要的线程局部、 block 作用域变量。
关于c - 静态变量是自动线程局部的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71342502/