Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得;定义但不使用“;使用gcc时发出警告__“线程”;说明符_C_Multithreading_Gcc_Compiler Construction_Thread Safety - Fatal编程技术网

获得;定义但不使用“;使用gcc时发出警告__“线程”;说明符

获得;定义但不使用“;使用gcc时发出警告__“线程”;说明符,c,multithreading,gcc,compiler-construction,thread-safety,C,Multithreading,Gcc,Compiler Construction,Thread Safety,我目前有一个带有一些全局变量的库。我想使这些变量成为线程局部变量,所以我在它们前面添加了“\uuuThread”说明符。它会执行此任务,但编译器会对这些变量发出“定义但未使用”警告。我用“-Wno unused variable”隐藏了警告,但我想知道为什么会发生这种情况,因为这些变量实际上正在库中使用 谢谢 如果它们确实是用static声明的,如注释所示,那么编译器可能是正确的,这只是浪费资源,因为您在每个编译单元中都创建了一个新的线程局部变量 如果您希望全局变量的静态分配改变为线程局部变量的

我目前有一个带有一些全局变量的库。我想使这些变量成为线程局部变量,所以我在它们前面添加了“\uuuThread”说明符。它会执行此任务,但编译器会对这些变量发出“定义但未使用”警告。我用“-Wno unused variable”隐藏了警告,但我想知道为什么会发生这种情况,因为这些变量实际上正在库中使用


谢谢

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

如果您希望全局变量的
静态
分配改变为线程局部变量的合理使用,那么您必须做更多的工作。像这样使用声明

extern thread_local double eps;
在头文件和定义中

thread_local double eps;
仅在一个
.c
文件中


还请注意,线程局部变量现在是C标准(C11)的一部分,关键字是
\u thread\u local
,标准“缩写”为
thread\u local
。如果您的编译器还不支持此功能,您可以很容易地将其有条件地定义为
\uu thread
或任何编译器扩展提供的该功能。

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

如果您希望全局变量的
静态
分配改变为线程局部变量的合理使用,那么您必须做更多的工作。像这样使用声明

extern thread_local double eps;
在头文件和定义中

thread_local double eps;
仅在一个
.c
文件中


还请注意,线程局部变量现在是C标准(C11)的一部分,关键字是
\u thread\u local
,标准“缩写”为
thread\u local
。如果您的编译器还不支持此功能,您可以很容易地将此功能有条件地定义为
\uu thread
或任何编译器扩展提供的功能。

它们是静态的还是外部的?@R。。它们是静态的。我认为库函数正在使用它们,在添加“\uu线程”说明符后,它们的行为与预期一致。看到这些警告很烦人,我想知道我是否做错了什么。如果它们是静态的,那么它们唯一可能被使用的地方就是它们定义在同一个
.c
文件中。我怀疑您的库函数正在使用不同的全局变量,这些变量恰好具有相同的名称……它们是静态的还是外部的?@R。。它们是静态的。我认为库函数正在使用它们,在添加“\uu线程”说明符后,它们的行为与预期一致。看到这些警告很烦人,我想知道我是否做错了什么。如果它们是静态的,那么它们唯一可能被使用的地方就是它们定义在同一个
.c
文件中。我怀疑您的库函数正在使用不同的全局变量,这些变量恰好具有相同的名称。。。