使用局部全局变量在单独的线程中运行C函数

Run C Function in Separate Threads with Local Global Variables

本文关键字:线程 运行 函数 单独 用局 全局变量      更新时间:2023-10-16

我有一些C源代码,它调用修改全局值的函数。我希望能够运行主代码的多个有点独立的实例,而不共享被调用函数所附带的全局变量。主代码位于与函数定义和全局变量不同的源文件中,因此主函数不能直接访问全局变量。有没有一种方法可以让主代码的多个实例用它们自己的全局变量副本调用函数?

我已经研究过线程,但是全局变量将在线程之间共享。我还考虑过运行两个独立的进程,并且只使用进程间通信来在多个实例之间进行通信,但这似乎对我想要做的工作来说太多了

最佳解决方案是有单独的线程,每个线程都有自己的全局变量副本,这些全局变量是函数使用的。

我只是想知道是否有其他人通过更简单的途径解决了类似的问题。

EDIT:我正在调用的带有全局变量的函数不是我的代码,所以我不能完全修改全局变量或调用它们的函数。

帮助澄清问题的示例代码:

// 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;
}

根据定义,"全局"对整个过程是全局的

听起来你正在寻找像线程本地存储这样的东西。这些变量与一个单独的"线程"相关联。

您没有提到您的平台或线程API,但这里有几个链接可能会有所帮助:

  • https://msdn.microsoft.com/en-us/library/windows/desktop/ms686991%28v=vs.85%29.aspx

  • http://dulanja.blogspot.com/2011/09/how-to-use-thread-local-storage-tls-in.html