Qu'est-ce que Section critique ?
Partie d'un programme manipulant des données partagées qui ne doit être exécutée que par un seul thread à la fois. On la protège par un verrou, par exemple, et on la garde aussi courte que possible.
Nom japonais: クリティカルセクション
« Section critique » apparaît dans 2 questions d'entraînement réparties sur 1 thèmes, dont Multicœur et synchronisation.
Domaine: Multicœur et synchronisation
Garder les sections courtes et mémoire transactionnelle
Pendant qu'un thread détient un verrou, les autres attendent ; de longues sections critiques sérialisent donc un programme et annulent le bénéfice des cœurs supplémentaires. Les concepteurs les raccourcissent, divisent un verrou grossier en verrous plus fins pour des données indépendantes, ou utilisent des opérations atomiques sans verrou. La mémoire transactionnelle matérielle offre une autre voie : la section critique s'exécute de manière spéculative sous forme de transaction dont les écritures restent invisibles aux autres threads. Si aucun autre thread n'a touché aux mêmes données, elle est validée d'un seul coup ; en cas de conflit, elle est abandonnée, annulée, puis relancée ou bascule sur un verrou normal.
Questions fréquentes
Quelle est la différence entre une section critique et un mutex ?
Une section critique est la région de code qui accède à des données partagées et ne doit pas s'exécuter de manière concurrente. Un mutex est l'un des mécanismes qui le garantissent, en ne laissant entrer dans la région que le thread qui le détient.
Pourquoi faut-il garder les sections critiques courtes ?
Les autres threads doivent attendre pendant qu'un thread s'y trouve, et sur microcontrôleur les interruptions peuvent être désactivées pendant ce temps. Des sections longues réduisent le parallélisme et retardent la réponse aux autres événements.
Désactiver les interruptions suffit-il à protéger une section critique ?
Sur un système monocœur où le seul concurrent est un gestionnaire d'interruption, c'est généralement suffisant. Sur un système multicœur, d'autres cœurs peuvent toujours s'exécuter ; un verrou ou une opération atomique est donc également nécessaire.