У меня есть сценарий использования, в котором я хочу запустить две функции параллельно: первая содержит работу, которую я хочу выполнить в потоке 0, а другая содержит цикл «для», который я хочу разделить между оставшимися 3 потоки.
мой код выглядит так:
void fct1(){
//do some work1
};
void fct2(){
int p;
#pragma omp for schedule(static)
for (p=start; p < end; p++) {
//do some work2
}
};
int main(){
#pragma omp parallel
{
int tid = omp_get_thread_num();
if (tid==0)
fct1();
if(tid!=0)
fct2();
}
return 0;
}
проблема в том, что "omp for" в fct2 зависает, потому что он также ожидает, пока поток 0 выполнит свою часть.
У вас есть предложения?
Спасибо.