Pthreads/fr: Difference between revisions

no edit summary
(Updating to match new version of source page)
No edit summary
Line 194: Line 194:
}
}
}}
}}
<div class="mw-translate-fuzzy">
Dans cet exemple, deux fils esclaves modifient la valeur de l'entier <tt>workload</tt> dont la valeur initiale doit être plus petite ou égale à 25. Le premier fil verrouille le mutex et attend parce que <tt>workload <= 25</tt>; la variable-condition <tt>ticker</tt> est créée et le mutex est détruit. Le deuxième fil peut alors exécuter la boucle, qui elle incrémente de trois la valeur de <tt>workload</tt> à chaque itération. À chaque incrémentation, le deuxième fil vérifie si la valeur de <tt>workload</tt> est plus grande que 25; si c'est le cas, le fil appelle <tt>[http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_cond_signal.html pthread_cond_signal]</tt> pour signaler la présence de la condition au fil en attente.
Dans cet exemple, deux fils esclaves modifient la valeur de l'entier <tt>workload</tt> dont la valeur initiale doit être plus petite ou égale à 25. Le premier fil verrouille le mutex et attend parce que <tt>workload <= 25</tt>; la variable-condition <tt>ticker</tt> est créée et le mutex est détruit. Le deuxième fil peut alors exécuter la boucle, qui elle incrémente de trois la valeur de <tt>workload</tt> à chaque itération. Après chaque itération, le deuxième fil vérifie si la valeur de <tt>workload</tt> est plus grande que 25; si c'est le cas, le fil appelle <tt>[http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_cond_signal.html pthread_cond_signal]</tt> pour signaler au fil en attende de <tt>ticker</tt> que la condition est présente. Si plusieurs fils sont en attente de <tt>ticker</tt>, il faut utiliser <tt>[http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cond_broadcast.html pthread_cond_broadcast]</tt> pour signaler la présence de la condition à tous les fils en attente.
 
</div>
Une fois que le signal est reçu par le premier fil, le deuxième fil fixe la condition de sortie de la boucle, détruit le mutex et disparait avec <tt>pthread_join</tt>.
 
Entretemps, le premier fil étant ''réveillé'', celui-ci incrémente de 15 la valeur de <tt>workload</tt> et quitte la fonction.
 
Quand tous les fils esclaves sont réintégrés, le fil maître imprime la valeur finale de <tt>workload</tt> et le programme se termine.
 
De façon générale, dans un programme réel où plusieurs fils sont en attente d'une variable-condition, la fonction pthread_cond_broadcast signale à tous les fils en attente que la condition est satisfaite.  
 
Dans ce contexte, pthread_cond_signal avertirait un seul fil au hasard et les autres fils demeureraient en attente.


=Pour en savoir plus=  
=Pour en savoir plus=  
Pour plus d'information sur pthreads, sur les arguments optionnels pour les diverses fonctions (les paramètres utilisés dans cette page utilisent l'argument par défaut NULL) et sur les sujets de niveau avancé, nous recommandons l'ouvrage de David Butenhof,  [https://ptgmedia.pearsoncmg.com/images/9780201633924/samplepages/0201633922.pdf Programming with POSIX Threads] ou l'excellent [https://computing.llnl.gov/tutorials/pthreads tutoriel du Lawrence Livermore National Laboratory].
Pour plus d'information sur pthreads, sur les arguments optionnels pour les diverses fonctions (les paramètres utilisés dans cette page utilisent l'argument par défaut NULL) et sur les sujets de niveau avancé, nous recommandons l'ouvrage de David Butenhof,  [https://ptgmedia.pearsoncmg.com/images/9780201633924/samplepages/0201633922.pdf Programming with POSIX Threads] ou l'excellent [https://computing.llnl.gov/tutorials/pthreads tutoriel du Lawrence Livermore National Laboratory].
rsnt_translations
56,437

edits