多线程和单线程代码维护

时间:2019-06-11 08:43:03

标签: c++ multithreading openmp

我有一个应用程序,该应用程序既可以通过多线程(通过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
}

这当然很丑。有没有办法防止这种蛮力的代码维护方式?唯一的其他方法似乎是拥有两个独立的代码库,我想避免这种情况。

1 个答案:

答案 0 :(得分:-1)

如何处理这些类? 用所需的接口创建一个基类,并派生两个类,一个用于单线程,一个用于多线程。如果要进行更改,则只需更改工厂。 (看看dependency injection