[英]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.