Pthreads/fr: Difference between revisions

Created page with "Un autre outil permet à plusieurs fils d'agir sur la même condition, par exemple d'attendre que les fils esclaves soient sollicités pour une tâche. Il s'agit d'une variabl..."
(Created page with "Une synchronisation plus subtile est possible avec le verrou lecture/écriture <tt>pthread_rwlock_t</tt>. Cet outil permet la lecture simultanée d'une variable par plusieurs...")
(Created page with "Un autre outil permet à plusieurs fils d'agir sur la même condition, par exemple d'attendre que les fils esclaves soient sollicités pour une tâche. Il s'agit d'une variabl...")
Line 115: Line 115:
Une synchronisation plus subtile est possible avec le verrou lecture/écriture <tt>pthread_rwlock_t</tt>. Cet outil permet la lecture simultanée d'une variable par plusieurs fils, mais se comporte comme un mutex standard, c'est-à-dire qu'aucun autre fil n'a accès à cette variable (en lecture ou en écriture). Comme pour le mutex, le verrou <tt>pthread_rwlock_t</tt> doit être initialisé avant son utilisation et détruit quand il n'est plus nécessaire dans le cours du programme. Un fil obtient un verrou en lecture avec  <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_rwlock_rdlock.html pthread_rwlock_rdlock]</tt> et un verrou en écriture avec <tt>[http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_rwlock_wrlock.html pthread_rwlock_wrlock]</tt>. Dans les deux cas, le verrou est détruit avec <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_rwlock_unlock.html pthread_rwlock_unlock]</tt>.
Une synchronisation plus subtile est possible avec le verrou lecture/écriture <tt>pthread_rwlock_t</tt>. Cet outil permet la lecture simultanée d'une variable par plusieurs fils, mais se comporte comme un mutex standard, c'est-à-dire qu'aucun autre fil n'a accès à cette variable (en lecture ou en écriture). Comme pour le mutex, le verrou <tt>pthread_rwlock_t</tt> doit être initialisé avant son utilisation et détruit quand il n'est plus nécessaire dans le cours du programme. Un fil obtient un verrou en lecture avec  <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_rwlock_rdlock.html pthread_rwlock_rdlock]</tt> et un verrou en écriture avec <tt>[http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_rwlock_wrlock.html pthread_rwlock_wrlock]</tt>. Dans les deux cas, le verrou est détruit avec <tt>[http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_rwlock_unlock.html pthread_rwlock_unlock]</tt>.


Another construct is used to allow multiple threads to wait for a single condition, for example waiting for work to become available for the worker threads. This construct is called a ''condition variable'' and has the datatype <tt>pthread_cond_t</tt>. Like a mutex or read/write lock, a condition variable must be initialized before its first use and destroyed when it is no longer needed. The use of a condition variable also requires a mutex to control access to the variable(s) that are the basis for the condition that is being tested. A thread that needs to wait on a condition will lock the mutex and then call the function <tt>[http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_cond_wait.html pthread_cond_wait]</tt> with two arguments: the condition variable, and the mutex. The mutex will be released ''atomically'' with the creation of the condition variable that the thread is now waiting upon, so that other threads can lock the mutex either to wait on the same condition or to modify one or more variables, thereby changing the condition.
Un autre outil permet à plusieurs fils d'agir sur la même condition, par exemple d'attendre que les fils esclaves soient sollicités pour une tâche. Il s'agit d'une variable conditionnelle, exprimée comme suit : <tt>pthread_cond_t</tt>. Comme le mutex ou le verrou lecture/écriture, la variable conditionnelle  doit être initialisée avant son utilisation et détruite lorsqu'elle n'est plus nécessaire. Pour utiliser cette variable, un mutex doit contrôler l'accès aux variables qui ont une incidence sur la condition. Un fil en attente d'une condition verrouille le mutex et fait appel à la fonction <tt>[http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_cond_wait.html pthread_cond_wait]</tt> avec la variable conditionnelle et le mutex en arguments. Le mutex est détruit ''atomiquement'' avec la création de la variable conditionnelle dont le résultat est attendu par le fil; les autres fils peuvent alors verrouiller le mutex, soit pour attendre la condition ou pour modifier une ou plusieurs de variables, ce qui modifiera la condition.
{{File
{{File
   |name=thread_condition.c
   |name=thread_condition.c
rsnt_translations
56,430

edits