【发布时间】:2017-09-11 11:53:52
【问题描述】:
我知道这是一个非常基本的问题,但我找不到简单的答案。
我正在编写一个程序,其中我需要一些变量为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;
}
但我得到的错误总是一样的。
我不明白如何初始化这种变量,我做错了什么?
【问题讨论】:
-
请告诉我们Minimal, Complete, Verifiable Example。具体来说,让我们看一个
.cpp文件。 -
在声明和定义中都需要
thread_local。 -
@G.M.谢谢!如果您想将其发布为答案,我会将这个问题设置为已解决
标签: c++ c++11 initialization thread-local