如何在 OpenMP 并行块中使用 gtest?

how to using gtest in OpenMP parallel block?

我想在 openmp 中使用 gtest。

我想在并行块中计算一些东西,并检查线程私有变量的结果,并做更多的计算。

这是一个例子。

#include "gmock.h"
#include <iostream>

using namespace testing;

TEST(SimpleGtest, OpenMP)
{
#pragma omp parallel
    {
        // some thread private variable
        int thread_index = omp_get_thread_num();
        int z;  
        // some calculation
        // ...
        // check result of thread private variable
        ASSERT_THAT(z, Eq(13));
        // other calculation
        // ...
    }
}

int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

但是当我编译代码时,编译器抱怨说:

error: "return" branches to or from an OpenMP structured block are illegal
          ASSERT_THAT(z, Eq(13));
          ^

上面的代码只是一个简单的例子。

我知道我们不能使用 "thread private variable" 但使用 "thread shared variable" 这样我们就可以在并行块中进行断言。

但是有什么解决方案可以使用gtest来检查线程私有变量在OpenMP并行块中的结果吗?

提前致谢!

不要在并行块中使用 ASSERT_THATEXPECT_EQ 可以提供帮助。