Sommaire

Synchronisation des threads

Comme les threads d’un processus partagent le même espace mémoire et la plupart des ressources du processus, il est délicat de gérer les éventuels conflits d’accès. Il faut donc utiliser des outils de synchronisation entre les threads, pour pouvoir garantir un accès exclusif aux éléments communs.

Il est possible de gérer les accès concurrents avec les sémaphores, étudiés dans les chapitres précédents, mais leur mise en œuvre est lourde et consommatrice de ressources. Il est généralement préférable d’utiliser des méthodes spécifiquement conçues pour les threads, en particulier les mutex et les variables conditionnelles.

1. Mutex

Un mutex (mutual exclusion) est un type particulier de sémaphore, implémenté sous forme d’une variable de type pthread_mutex_t, qui peut prendre uniquement deux états, libre ou verrouillé.

Un thread peut acquérir ou libérer un mutex. À un instant donné, un seul thread possède le mutex. Seul le thread qui possède le mutex peut le libérer.

Le mutex est utilisable par tous les threads ayant accès à la zone mémoire dans laquelle il a été créé.

Un mutex permet donc de "protéger" des ressources communes (le plus souvent des variables globales) en déterminant quel thread peut y avoir accès. ...