我目前有一个包含一些全局变量的库。我想让这些变量成为本地线程,所以我在它们前面添加了“__thread”说明符。它完成了这项工作,但编译器对这些变量给出了“定义但未使用”的警告。我用“-Wno-unused-variable”隐藏了警告,但我想知道为什么会发生这种情况,因为这些变量实际上是在库中使用的。
谢谢!
答案 0 :(得分:1)
如果它们真的用static
声明,如注释所示,您的编译器可能是正确的,这只是浪费资源,因为您在每个编译单元中创建一个新的线程局部变量。 / p>
如果您希望将全局变量的static
分配更改为合理使用线程局部变量,则必须执行更多操作。使用声明作为
extern thread_local double eps;
在头文件和定义中
thread_local double eps;
只有一个.c
个文件。
另请注意,线程局部变量现在是C标准(C11)的一部分,关键字是_Thread_local
,标准“缩写”为thread_local
。如果你的编译器还不支持这个,那么你可以轻松地#define
有条件地__thread
或者任何编译器扩展为你提供该功能。