我正在尝试使用openmp编写一个程序,其中结构块是一个while循环。
#pragma omp parallel num_threads(x)
while(condition){
}
我必须决定编写任何线程停止的条件的方法。我需要知道在while循环中是否有一个break语句是正确的。
答案 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:
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.
}
}