如何减少C程序中由全局变量引起的依赖性

时间:2019-07-04 03:57:47

标签: c multithreading global-variables

我想使用多线程来加快顺序C程序的处理速度。我的问题是我的C程序有很多全局变量。它们由我的C程序中的函数读取和写入。因此,由于与运行顺控程序相比,它不再拥有确切的结果,因此无法通过多线程将功能并行化。

我使用OpenMP处理我的C程序。但是,我想在使用OpenMP之前重构我的C程序以达到上述目的

这是我的示例:

int a = 5 ; // global variable

funcA () {
    int b; 
    b = a + 5; // read a
}

funcB () {
    printf("%d\n", a); 
}

我不想找到并行完成funcAfuncB的方法,但是我想减少由依赖引起的全局变量(如上例中的变量a)。

2 个答案:

答案 0 :(得分:1)

没有简单的方法可以完成复杂的事情。有时即使从零开始编码,也可能难以设计没有全局变量的代码。对于您的情况,这个问题要困难得多。

关于如何减少全局变量的数量,没有(也不能是)通用解决方案。

唯一可以做的是:

  • 分析代码库;
  • 了解全局变量的用途以及如何使用它们;
  • 找到一种无需使用全局变量即可实现相同行为的方法。

当然,处理某些全局变量可能比处理其他全局变量容易。您可能要从前者开始。看到成功如愿以偿,将有助于您在执行任务期间的士气。

如果您了解如何编写代码,可能会有所帮助:

  • 胎面安全;
  • 重入。

Google可以在此方面为您提供极大的帮助。

答案 1 :(得分:1)

通常,删除全局变量并非易事。

您需要逐案处理。

您真正需要做的是尝试将所需的变量作为函数参数传递,而不是将它们作为全局变量。

在给出的这个示例中,我不给出任何解决方案,而无需查看函数funcAfuncB的调用方式。您应该尝试将变量a作为参数传递给两个函数。您可能需要备份一些功能,直到获得最终调用这两个功能的通用功能。