使用 gcc“__thread”说明符时收到“定义但未使用”警告

问题描述 投票:0回答:1

我目前有一个包含一些全局变量的库。我想让这些变量成为本地线程,所以我在它们前面添加了“__thread”说明符。它完成了这项工作,但编译器对这些变量发出“定义但未使用”警告。我用“-Wno-unused-variable”隐藏了警告,但我想知道为什么会发生这种情况,因为这些变量实际上正在库中使用。

c multithreading gcc thread-safety
1个回答
1
投票

如果它们确实是用

static
声明的,如注释中所示,那么您的编译器可能是正确的,这只是浪费资源,因为您正在每个编译单元中创建一个新的线程局部变量。

如果您希望全局变量的

static
分配更改为线程局部变量的合理使用,您必须做更多的事情。使用这样的声明

extern thread_local double eps;

在你的头文件和定义中

thread_local double eps;

仅在您的

.c
文件之一中。

另请注意,线程局部变量现在是 C 标准 (C11) 的一部分,并且关键字是

_Thread_local
,标准“缩写”为
thread_local
。如果您的编译器尚不支持此功能,您可以轻松地将
#define
有条件地设置为
__thread
或任何为您提供该功能的编译器扩展。

© www.soinside.com 2019 - 2024. All rights reserved.