我想使用多线程加速顺序 C 程序的处理。我的问题是我的 C 程序有很多全局变量。它们由我的 C 程序中的函数读取和写入。因此,它无法通过多线程将函数并行化在一起,因为与运行序列程序相比,它不再包含确切的结果。
我使用 OpenMP 来处理我的 C 程序。但是,我想重构我的 C 程序以在使用 OpenMP 之前做出上述反应
这是我的例子:
int a = 5 ; // global variable
funcA () {
int b;
b = a + 5; // read a
}
funcB () {
printf("%dn", a);
}
我不想找到并行完成funcA
和funcB
的方法,但我想减少由全局变量引起的依赖性(如上例中的变量a
)。
没有简单的方法来做一件复杂的事情。有时设计没有全局变量的代码似乎很困难,即使从零开始编码也是如此。我你的情况,问题要困难得多。
没有(也不可能有)关于如何最小化全局变量数量的通用解决方案。
唯一能做的是:
- 分析代码库;
- 了解全局变量的用途及其使用方式;
- 找到一种在不使用全局变量的情况下实现相同行为的方法。
当然,处理某些全局变量可能比其他变量更容易。您可能想从前者开始。看到成功即将到来将有助于您在任务期间的士气。
如果您阅读有关如何编写代码的信息,可能会对您有所帮助:
- 胎面安全;
- 可重入。
谷歌可以在这方面为您提供极大的帮助。
一般来说,删除全局变量并不是一件容易的事。
您需要根据具体情况进行。
您真正需要做的是尝试将所需的变量作为函数参数传递,而不是将它们作为全局变量传递。
在这个给出的例子中,如果不查看如何调用函数funcA
和funcB
,我就无法给出任何解决方案。您应该尝试将变量a
作为参数传递给这两个函数。您可能需要备份一些函数,直到找到最终调用这两个函数的通用函数。