thread_local变量初始化

时间:2017-04-15 10:12:38

标签: c++ c++11 initialization 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

我已使用.cpp关键字以避免多次声明。 无论如何,当我尝试在同一namespace内的// Utilities.cpp namespace utils { int var1; int var2; std::vector<double> vect1; } 文件中初始化这些变量时,这样:

Non-thread-local declaration of 'var1' follows thread-local declaration

我收到此错误:

var2

对于其他变量vect1main.cpp也一样。

我试图在int utils::var1; int utils::var2; std::vector<double> utils::vect1; int main(int argc, const char * argv[]) { return 0; } 文件的程序开头将它们初始化为类的正常静态变量,如下所示:

last_stock_date

但我得到的错误总是一样的。

我不明白如何初始化这种变量,我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据评论......

声明和定义必须匹配。因此,thread_local存储限定符必须同时存在。所以你需要......

// Utilities.hpp
namespace utils {
  extern thread_local int var1;
  extern thread_local int var2;
  extern thread_local std::vector<double> vect1;
}

和...

// main.cpp
thread_local int utils::var1;
thread_local int utils::var2;
thread_local std::vector<double> utils::vect1;