gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:39:48 30 4
gpt4 key购买 nike

我有一些 C 源代码可以调用修改全局值的函数。我希望能够运行主代码的多个、有些独立的实例,而无需共享附加到被调用函数的全局变量。主代码与函数定义和全局变量位于单独的源文件中,因此主函数无法直接访问全局变量。有没有一种方法可以让主代码的多个实例调用带有全局变量拷贝的函数?

我看过线程,但全局变量将在线程之间共享。我还查看了运行两个单独的进程,并仅使用进程间通信在多个实例之间进行通信,但这对于我想做的事情来说似乎工作量太大了。

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

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

编辑:我正在调用的具有全局变量的函数不是我的代码,因此我不能完全修改全局变量或调用它们的函数。

帮助阐明问题的示例代码:

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

最佳答案

根据定义,“全局变量”对整个进程都是全局的。

听起来您正在寻找类似 Thread Local Storage 的内容.这些变量与单个“线程”相关联。

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

关于c++ - 使用局部全局变量在单独的线程中运行 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37381938/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com