在具有本地全局变量的单独线程中运行C函数

时间:2016-05-23 02:46:44

标签: c++ c multithreading globals

我有一些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;
}

1 个答案:

答案 0 :(得分:1)

根据定义,“globals”对整个进程是全局的

听起来你正在寻找像Thread Local Storage这样的东西。这些变量与单个“线程”相关联。

您没有提及您的平台或线程API,但这里有一些可能有用的链接: