我有一个应用程序,该应用程序既可以通过多线程(通过OpenMP)运行,也可以作为单线程运行。
我有一个#define MT true //if true, then multithreaded, else singlethreaded
宏,可以在两个选项之间进行切换。
假设在我的单线程应用程序中有一个数组:
int foo [5];
在多线程情况下(假设有4个线程),我不得不将以上声明为:
int foo[4][5];
单线程情况下的函数,其声明为:
void work_on_foo(int* foo){
foo[4] = 2;
}
成为
void work_on_foo(int thread, int** foo){
foo[thread][4] = 2;
}
目前,为了处理此代码膨胀,我正在按以下步骤进行复制操作:
#if MT
void work_on_foo(int thread, int** foo){
#else
void work_on_foo(int* foo){
#endif
#if MT
foo[thread][4] = 2;
#else
foo[4] = 2;
#endif
}
这当然很丑。有没有办法防止这种蛮力的代码维护方式?唯一的其他方法似乎是拥有两个独立的代码库,我想避免这种情况。
答案 0 :(得分:-1)
如何处理这些类? 用所需的接口创建一个基类,并派生两个类,一个用于单线程,一个用于多线程。如果要进行更改,则只需更改工厂。 (看看dependency injection)