我知道这是一个非常基础的问题,但我找不到一个简单的答案。
我正在编写一个程序,其中需要一些变量是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;
}
但我一直得到相同的错误。
我不明白如何初始化这种类型的变量,我做错了什么?
.cpp
文件。 - einpoklumthread_local
。 - G.M.