1
我知道这是一个非常基本的问题,但我无法找到一个简单的答案。thread_local变量初始化
我正在写一个程序,其中我需要一些变量为thread_local
。根据我的理解,这意味着这些变量是“像全局变量”,但每个线程都有自己的副本。
我已经把这些变量在一个叫utils
头文件中专门命名叫这样Utilities.hpp
:
// Utilities.hpp
namespace utils {
extern thread_local int var1;
extern thread_local int var2;
extern thread_local std::vector<double> vect1;
}
我用extern
关键字,以避免多次声明。 反正当我尝试初始化同namespace
像这里面的.cpp
文件中的这些变量:
// Utilities.cpp
namespace utils {
int var1;
int var2;
std::vector<double> vect1;
}
我得到这个错误:
Non-thread-local declaration of 'var1' follows thread-local declaration
与同为所有其他变量var2
和vect1
。
我试着他们在我的节目开始在main.cpp
文件中像这样初始化为一类的普通的静态变量:
int utils::var1;
int utils::var2;
std::vector<double> utils::vect1;
int main(int argc, const char * argv[]) {
return 0;
}
,但我得到的错误是永远不变的。
我不明白如何初始化这种变量,我做错了什么?
请给我们一个[最小,完全,可核查示例](https://stackoverflow.com/help/mcve)。具体来说,我们来看一个'.cpp'文件。 – einpoklum
在声明*和*定义中需要'thread_local'。 –
@ G.M。谢谢!如果你想发布它作为答案,我会设置这个问题解决 – jackscorrow