OpenMP隐式障碍

时间:2016-03-19 18:04:12

标签: c++ multithreading openmp

您好我正在阅读此网站http://www.viva64.com/en/a/0054/,对于第17点,它表示下面没有屏障的代码是错误的。为什么?我在http://bisqwit.iki.fi/story/howto/openmp/#BarrierDirectiveAndTheNowaitClause读到每个并行块的末尾都有一个隐式屏障,并且在每个部分的末尾,for和single语句,除非使用了nowait指令。

struct MyType 
{
    ~MyType();
};
MyType threaded_var;
#pragma omp threadprivate(threaded_var)
int main() 
{
    #pragma omp parallel
    {
           ...
           #pragma omp barrier // code is wrong without barrier.
    }    
}

请有人向我解释。感谢

1 个答案:

答案 0 :(得分:0)

链接的网页在这一点上是错误的。在并行部分的末尾实际上有一个隐含的障碍。

由于网站似乎有Windows焦点而MS只支持OpenMP标准2.0,因此值得注意的是,这个隐含障碍不仅在当前标准4.5中,而且在版本2.0中:

  

完成并行构造后,团队中的线程   在隐含障碍同步,[...]

http://www.openmp.org/mp-documents/cspec20.pdf