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

时间:2013-12-07 04:52:21

标签: c multithreading gcc compiler-construction thread-safety

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

如果您希望将全局变量的static分配更改为合理使用线程局部变量,则必须执行更多操作。使用声明作为

extern thread_local double eps;

在头文件和定义中

thread_local double eps;

只有一个.c个文件。

另请注意,线程局部变量现在是C标准(C11)的一部分,关键字是_Thread_local,标准“缩写”为thread_local。如果你的编译器还不支持这个,那么你可以轻松地#define有条件地__thread或者任何编译器扩展为你提供该功能。