使用局部全局变量在单独的线程中运行C函数
Run C Function in Separate Threads with Local Global Variables
我有一些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
相关文章:
- 为什么std::async使用同一个线程运行函数
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- 如何使线程运行现有类的函数?C++
- 使用 4 个和 8 个线程运行时执行的时间相等
- 在我调用join()之前,std ::线程运行
- winsock连接调用崩溃如果多个线程运行,则在一个线程中正常工作
- 如何确保这部分代码仅由一个线程运行(在 openmp 中)
- 线程连接在另一个线程运行时会导致分段错误
- 动态提升线程运行存储在具有共享指针的向量中的对象的方法
- 如何启动一个 boost::线程运行一个成员函数
- 如果由另一个 OpenMP 程序调用,则外部调用的 OpenMP 程序仅使用一个线程运行
- 线程运行时间最少
- 计算线程运行的次数
- MySQL C API:从不同线程运行查询时出现分段错误
- 使用两个线程运行和中断一个无限循环
- 与icc 14一起使用多线程运行时库时的错误
- 为什么我得到无限循环只有线程# 0后,所有5个线程运行多线程c++用餐哲学家谜语
- 发布配置上的Visual Studio c++多线程运行时问题
- 使用逻辑线程运行程序
- 为什么设置 CPU 关联会使线程运行速度变慢