c - 静态变量是自动线程局部的吗?

标签 c c11 thread-local

局部 static 变量是自动线程局部的,还是它们在线程之间共享?

void f() {
    static int x; // <-- need explicit _Thread_local ?
}

最佳答案

在 C 语言规范承认线程或对线程有任何支持之前, block 作用域变量有 static,更不用说 _Thread_local 了。在这种情况下,当不与 _Thread_local 结合时,它指定静态存储持续时间,这意味着变量在程序执行开始时就存在(好像)并且存在并且在整个程序运行期间保持其最后存储的值。具有静态存储持续时间的对象由所有线程共享。

另一方面,_Thread_local 总是指定线程存储持续时间,这意味着如此声明的对象存在并在线程的整个生命周期内保持其最后存储的值线程,并且声明的标识符在每个线程中指定一个不同的对象。当一个对象在 block 范围内声明为 _Thread_local 时,它还必须带有 externstatic 限定符,以传达其链接 -- 外部或无。

extern 在 block 范围内任何类型的声明都是不常见的,但它们偶尔会起到有用的作用。不过,大多数时候,static _Thread_local 是您需要的线程局部、 block 作用域变量。

关于c - 静态变量是自动线程局部的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71342502/

相关文章:

java - 如何在 OSGi 中实现一个包,该包具有一个将值放入 ThreadContext 的类,以使这些值对其他包可见

java - 线程本地删除?

c - "linker input file unused because linking not done"是什么意思? (C 生成文件)

c - 从响应中获取请求的 url

c - 为什么允许多次声明 typedef 标识符?

c - C 标准 malloc'ing 字符的潜在问题

C 中的完整类型到不完整类型 : C11 standard

java - 在 Java 中使用 ThreadLocal 的良好实践

C 配置 API

c - 理解递归宏扩展