[英]How to make multiple instances of global variables in C++
問題標題可能很難理解,但是下面是我的問題:
我是C ++的新手,正在開發一個使用全局變量簡化程序的程序。 (我知道它們通常很糟糕,但是我敢肯定,任何其他選擇都會變得更糟。)我知道有很多方法可以使諸如全局變量之類的事情產生。 我的問題是該程序的功能之一是,在某些情況下,整個程序可能有(幾乎)多個線程。 這些線程中的每一個都需要它們自己的這些全局變量實例。 因此,我的問題是,要創建可以創建多個實例的某種全局變量,我需要做哪種類型的事情? 我不在乎它會如何制作。 我希望所有全局變量的名稱(例如名稱空間)都是全局的,以防止名稱意外沖突,但這不是必需的。
我曾經考慮過使用存儲所有值的類的實例,但是我想不出一種簡單的方法來使所有不同的文件/函數都可以輕松訪問它。
提前致謝!
您應該能夠為此使用本地線程,每個線程都有其自己的實例。
thread_local int foo = 0;
https://zh.wikipedia.org/wiki/Thread-local_storage#C_and_C.2B.2B
您可能具有多個實例函數的Singleton:
struct GlobalVariables {
int var1;
int var2;
static GlobalVariables& instance1(){
static GlobalVariables instance;
return instance
}
static GlobalVariables& instance2(){
static GlobalVariables instance;
return instance
}
};
int main(){
auto& vars1 = GlobalVariables::instance1();
vars1.var1 = 42;
}
也許您可以考慮為每個全局變量使用一個映射結構,其中線程ID將用作鍵。
例如,如果您希望每個線程都擁有自己的實例:
int foo
然后,您可以創建一個地圖,而不是創建上面的全局“ foo”:
map<size_t, int> foo
並且每個線程都將這樣寫入foo的“它自己的實例”:
foo[std::this_thread::get_id().hash()] = foo_value_for_this_thread
並這樣閱讀:
foo_value_for_this_thread = foo[std::this_thread::get_id().hash()]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.