Sommaire

Synchronisation entre threads Synchronisation

1. Nécessité de la synchronisation

La programmation de plusieurs chemins d’exécution ne pose aucun problème particulier jusqu’à ce qu’ils partagent les mêmes informations ou les mêmes ressources. En effet, étant donné que le système d’exploitation peut interrompre les traitements à n’importe quel moment, il risque d’y avoir des objets en cours de modification dans un thread préempté qui se retrouveront dans des états instables pour le thread suivant. Pour se prémunir de ces dysfonctionnements, il faut "synchroniser" les threads, c’est-à-dire protéger des zones de traitement délicates.

Cela ne va pas jouer sur le système de gestion qui continuera à activer les threads les uns après les autres ; simplement, lorsqu’un thread A aura besoin d’accéder à une donnée commune protégée qu’un thread B n’aura pas terminé de mettre à jour, le thread A devra "attendre le prochain tour". Et si au prochain tour le travail du thread B n’est toujours pas terminé alors il devra attendre le suivant et ainsi de suite.

Le principe est le même s’il s’agit d’un traitement commun que le thread B devra avoir terminé avant que le thread A ne puisse l’effectuer à son tour. C’est ce scénario que l’extrait ...