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