Évidemment ce n'est pas du tout dans l'esprit d'openMP où la mécanique des filaments est supposément camouflée, mais pourquoi ne pas employer un sémaphore ?
Au début de la zone parallèle le filament 0 le ferme (sem_init à valeur négative), et une barrière impose aux autre processus d'attendre que la fermeture soit effective. Ensuite, à la place du #pragma omp barrier, le processus 0 ouvre le sémaphore (sem_post nthread fois) autant de fois qu'il y a d'autre filaments. Les autres filaments eux exécutent une portion de code les faisant attendre l'ouverture (sem_wait). Une fois que le boulot est achevé, un petit coup de omp barrier pour que le filament maître puisse détruire le sémaphore en toute quiétude.
# Sémaphores
Posté par ǝpɐןƃu∀ nǝıɥʇʇɐW-ǝɹɹǝıԀ (site web personnel) . En réponse au message OpenMP, synchronisation. Évalué à 5.
Évidemment ce n'est pas du tout dans l'esprit d'openMP où la mécanique des filaments est supposément camouflée, mais pourquoi ne pas employer un sémaphore ?
Au début de la zone parallèle le filament 0 le ferme (sem_init à valeur négative), et une barrière impose aux autre processus d'attendre que la fermeture soit effective. Ensuite, à la place du #pragma omp barrier, le processus 0 ouvre le sémaphore (sem_post nthread fois) autant de fois qu'il y a d'autre filaments. Les autres filaments eux exécutent une portion de code les faisant attendre l'ouverture (sem_wait). Une fois que le boulot est achevé, un petit coup de omp barrier pour que le filament maître puisse détruire le sémaphore en toute quiétude.
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace