OpenMP exécute des threads mais continue main

J’essaie d’utiliser OpenMP pour le threading car il est multi-plateforme. Cependant, je ne peux pas comprendre comment faire en sorte que le code continue après le parallèle tant que la boucle est en cours d’exécution. Fondamentalement, il exécute simplement la première boucle en parallèle mais ne parvient jamais à la deuxième boucle non parallèle?

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()); } } 

Je pense que vous pourriez juste faire l’un des fils de votre fil spécial dans votre bloc parallèle omp

 int main() { #pragma omp parallel if(omp_get_thread_num()==0){ while(1) { Sleep(4000); printf("Hello from main %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads()); } }else{ while(1) { Sleep(4000); printf("doing work in thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads()); } } } } 

Il est difficile de juger de la météo dans votre cas sans plus de détails.

Vous pouvez également utiliser des sections . Exemple à partir d’ici: http://bisqwit.iki.fi/story/howto/openmp/#Sections :

 #pragma omp parallel // starts a new team { //Work0(); // this function would be run by all threads. #pragma omp sections // divides the team into sections { // everything herein is run only once. { Work1(); } #pragma omp section { Work2(); Work3(); } #pragma omp section { Work4(); } } //Work5(); // this function would be run by all threads. } 

Vous pouvez faire une renationalisation nestede: OpenMP: Quel est l’avantage de la parallélisation nestede?