Pthreads/fr: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 62: Line 62:


=Synchronisation de l'accès aux données=  
=Synchronisation de l'accès aux données=  
Dans un programme réel, les fils esclaves doivent lire et dans certains cas modifier certaines données afin d'accomplir leurs tâches. Les données sont habituellement un ensemble de variables globales de divers types et dimensions; l'accès concurrent en lecture et en écriture par plusieurs fils doit donc être synchronisé afin d'éviter les [https://en.wikipedia.org/wiki/Race_condition situations de compétition], c'est-à-dire les cas où le résultat du programme dépend de l'ordre dans lequel les fils esclaves accèdent aux données. Si un programme en parallèle doit donner le même résultat que sa version en série, les situations de compétition ne doivent pas se produire.
Dans un programme réel, les fils esclaves doivent lire et dans certains cas modifier les données afin d'accomplir leurs tâches. Ces données sont habituellement un ensemble de variables globales de divers types et dimensions; l'accès concurrent en lecture et en écriture par plusieurs fils doit donc être synchronisé afin d'éviter les [https://en.wikipedia.org/wiki/Race_condition situations de compétition], c'est-à-dire les cas où le résultat du programme dépend de l'ordre dans lequel les fils esclaves accèdent aux données. Si un programme en parallèle doit donner le même résultat que sa version en série, les situations de compétition ne doivent pas se produire.


Le moyen le plus simple et le plus utilisé pour contrôler l'accès concurrent est le [https://fr.wikipedia.org/wiki/Verrou_(informatique) verrou]; dans le contexte de pthreads,  le mécanisme de verrouillage est le mutex (pour ''mutual exclusion''); les variables de ce type sont assignées à un seul fil à la fois. Après la lecture ou la modification, le fil désactive le verrou. Le code entre l'appel de la variable et le moment où elle est désactivée est exécuté exclusivement par ce fil. Pour créer un mutex, il faut déclarer une variable globale de type <tt>pthread_mutex_t</tt>; cette variable est initialisée par la fonction <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_init.html pthread_mutex_init]</tt>. À la fin du programme, les ressources sont ''déverrouillées'' par la fonction <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_init.html pthread_mutex_destroy]</tt>.
Le moyen le plus simple et le plus utilisé pour contrôler l'accès concurrent est le [https://fr.wikipedia.org/wiki/Verrou_(informatique) verrou]; dans le contexte de pthreads,  le mécanisme de verrouillage est le mutex (pour ''mutual exclusion''); les variables de ce type sont assignées à un seul fil à la fois. Après la lecture ou la modification, le fil désactive le verrou. Le code entre l'appel de la variable et le moment où elle est désactivée est exécuté exclusivement par ce fil. Pour créer un mutex, il faut déclarer une variable globale de type <tt>pthread_mutex_t</tt>; cette variable est initialisée par la fonction <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_init.html pthread_mutex_init]</tt>. À la fin du programme, les ressources sont ''déverrouillées'' par la fonction <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_init.html pthread_mutex_destroy]</tt>.
rsnt_translations
56,437

edits