我有一些C源代码调用修改全局值的函数。我希望能够运行多个有些独立的主代码实例,而不需要共享附加到被调用函数的全局变量。主要代码在一个单独的源文件中,而不是函数定义和全局变量,因此main函数不能直接访问全局变量。有没有办法让主代码的多个实例用自己的全局变量副本调用函数?
我查看过线程,但全局变量将在线程之间共享。我还研究了运行两个独立的进程,并且只使用进程间通信来在多个实例之间进行通信,但这似乎对我想做的事情来说太多了。
最佳解决方案是拥有单独的线程,每个线程都有自己的函数使用的全局变量副本。
我只是想知道是否有其他人通过更简单的路线解决了类似的问题。
编辑:我调用的全局变量函数不是我的代码,因此我无法完全修改全局变量或调用它们的函数。帮助澄清问题的示例代码:
// In func.c
int g_A = 0;
void func()
{
g_A++;
}
// In main.cpp
void Thread()
{
while (true)
{
func();
}
}
int main()
{
// Could be threads, just looking for something that will allow
// me to run the "Thread" function in multiple parallel instances
// without sharing the global variables attached to the function
// that it calls
std::thread foo1(func);
std::thread foo2(func);
foo1.join();
return 0;
}
答案 0 :(得分:1)
根据定义,“globals”对整个进程是全局的。
听起来你正在寻找像Thread Local Storage这样的东西。这些变量与单个“线程”相关联。
您没有提及您的平台或线程API,但这里有一些可能有用的链接: