Je le scénario suivant:besoin de conseils/suggestion sur la synchronisation des pthreads (combiner l'utilisation de la variable de l'état et de la barrière)
je partage une tâche en plusieurs étapes, il y a plusieurs fils dans chaque étape pour faire le travail et les threads de l'étape suivante doivent attendre que tous les threads de l'étape en cours se terminent.
Par exemple:
Fil 1, 2, 3 font le travail dans la première étape
Fil 4, 5, 6 font le travail à l'étape deux
Fil 7, 8, 9 effectuent l'étape trois ...
Les threads de chaque étape sont indépendants, mais ils doivent attendre que les threads de l'étape précédente se terminent.
Voici comment je veux y parvenir:
- Dans chaque fil de l'étape en cours, attendez à la condition que représentant que si l'étape actuelle peut être démarré
- une fois l'étape en cours peut être démarré , tous les threads commencent à faire le travail, et attendent une barrière pour que tous les threads de cette étape se terminent
- Une fois que tous les threads de cette étape sont terminés, diffusez sur la variable d'état sur laquelle les threads d'étape suivants attendent
Est-ce que ça fait? Quelque chose ne va pas ici?
Je suis gâté par les structures de langage de haut niveau pour les programmes multithread, et l'utilisation des API pthread est douloureuse pour moi. Ici, j'ai besoin de conseils sur la meilleure pratique dans ce cas d'utilisation? Merci beaucoup
Il semble que votre stratégie semble assez bonne. Dans votre scénario, l'approche de parallélisation est (1) tâche "pipeline" et (2) chaque étape "fork-join", qui utilise la variable de condition pour (1) et la barrière pour (2). – yohjp
Merci pour votre commentaire, @yohjp. J'ai déjà implémenté une solution de travail en appliquant l'approche ci-dessus :) – chuchao333