在openmp中打破结构化块

时间:2013-04-07 03:14:32

标签: c multithreading openmp

我正在尝试使用openmp编写一个程序,其中结构块是一个while循环。

#pragma omp parallel num_threads(x)
while(condition){

}

我必须决定编写任何线程停止的条件的方法。我需要知道在while循环中是否有一个break语句是正确的。

2 个答案:

答案 0 :(得分:3)

我认为使用omp取消更好。

代码看起来与此类似。

#pragma omp parallel
{       
    while(true) {
        #pragma omp cancellation point parallel

        // Do the heavy work

        if(condition==false) {
            #pragma omp cancel parallel
        }
    }
}

答案 1 :(得分:1)

你的问题有点不完整。你说“任何一个线程停止的条件”,但是后数学怎么样:

  1. 线程的其余部分也应该退出。
  2. 线程的其余部分应该继续,直到它们符合条件。
  3. 案例1:

    bool abort = 0;
    #pragma omp parallel num_threads(x) private(abort)
    {
       while(!abort)
       {
          // The work you need to do.
          #pragma omp critical
          {
              if(condition==false)
              {
                 abort = 1; 
              }
          }
       }
    }
    

    案例2:

    #pragma omp parallel num_threads(x)
    {
        while(condition)
       {
            // The work you need to do.
       }
    }