我想使用OpenMP進行線程,因爲它是跨平臺的。然而,我不能解決如何在循環運行時並行繼續之後創建代碼?它基本上只是並行執行第一個循環,但從來沒有進入第二個非並行循環?OpenMP運行線程,但繼續主線
int main() {
#pragma omp parallel
while(1) {
Sleep(4000);
printf("doing work in thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
while (1) {
Sleep(4000);
printf("Hello from main %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
}
你不能有工作線程「OMP並行」區域結束後運行(在你的榜樣並行區域是第一「,而( ){...}'在並行區域的末尾有一個不可見的障礙(就在第二次之前) – osgx 2012-02-03 17:37:52
實際上,OpenMP本身對於你想要的是不好的選擇,它不是「另一個線程庫」,它是一個不同的解決方案有自己的規則可以遵循,更好的解決方案是啓動一個單獨的線程(可以使用OpenMP),讓主線程進入「非並行」循環。如果你更詳細地描述用例,那麼這很好。 – 2012-02-03 20:41:35
@AlexeyKukanov,我同意,但OpenMP具有問題中描述的好處。 – 2012-02-03 23:09:41