我正在尝试编写一个程序,我必须通过(共享)库调用某些函数(其源代码可用)。库的C代码有几个全局变量,许多函数会更改这些全局变量的值。我在程序中要做的就是要求每个函数调用都使用一组新的变量。
例如,让此函数成为库的一部分:
int x = 1;
int foo()
{
int a = 0;
//do somethings to 'a'
//...
x++;
return a;
}
现在,每当我从程序中调用foo()
时,x
的值都会从1更新为2然后是3然后是4等等...我尝试构建一个程序,以便每次调用foo()
时,它都会看到x = 1。
我很遗憾地说我对C / linux如何处理这些变量空间的了解不足,所以这个问题可能看起来很模糊。以上只是一个小例子;实际上,有很多变量几乎不可能手动重置它们的值。
编译该库和/或将其用于我的程序以刷新变量的最佳方法是什么?
(另一方面,我也想做的是并行调用foo(),但由于共享变量,我不能这样做。)
编辑: 在处理一些Web开发项目时,我曾经将一些代码封装在webservices中,然后从主程序中调用这些服务。 C / Linux中是否存在类似的框架?请注意,函数返回数据。
答案 0 :(得分:3)
您已经发现全局变量(或一般的全局状态)是非常糟糕的主意的主要原因之一。
由于您可以访问源代码,我建议您花一些时间来重构源代码。
您可以使用以下策略实现对 foo 的调用并行化的功能:
如果对源代码进行此类更改是不可行的,则可以通过启动child processes来使用多个CPU核心。每个子进程都有自己的内存空间。该选项的效率不如使用多线程。
答案 1 :(得分:0)
我没有详细解答。但您可以尝试以下方法之一: