0
我正在運行到openMP死鎖。由於空間限制,原始代碼相對較長並且很難放在這裏。我列舉了一個代碼結構的例子,它似乎具有相似的結構,並將 運行到類似的問題中。openMP死鎖,同時使用並行區域和一起打開
int main(int argc, char const *argv[])
{
#pragma omp parallel
{
int thread_id = omp_get_thread_num();
if(thread_id>0)
{
#pragma omp for schedule(dynamic) nowait
for (int i = 0; i < 10; ++i)
{
printf("%dth hello from thread \t: %d\n",i,thread_id);
}
}
else
{
printf("=========Master thread \t: %d ==============\n",thread_id);
}
}
printf(" +=*+=*+=*+=*+=*+=*+=*+=*+=*+=*+=*\n");
#pragma omp parallel
{
int thread_id = omp_get_thread_num();
if(thread_id>0)
{
#pragma omp for schedule(dynamic) nowait
for (int i = 0; i < 10; ++i)
{
printf("%dth hello from thread \t: %d\n",i,thread_id);
}
}
else
{
printf("=========Master thread \t: %d==============\n ",thread_id);
}
}
return 0;
}
我打算先用線程做一個計算,而我想利用其他線程併發 的循環中執行並行的OpenMP。代碼在執行openmp並行區域時掛起。如果我在GDB中引入 程序,我會看到以下消息。
Program received signal SIGINT, Interrupt.
0x000000327c00b5bc in [email protected]@GLIBC_2.3.2() from /lib64/libpthread.so.0
我需要知道我想要做的事情是否有效和可能。如果是這樣,什麼是可能的工作 圍繞着它的工作。