Qu'est-ce que Sans verrou (lock-free) ?

Propriété d'un algorithme garantissant que, même si un thread s'arrête en cours de route, au moins un des autres threads peut progresser. Réalisé avec des instructions atomiques comme CAS.

Nom japonais: ロックフリー

« Sans verrou (lock-free) » apparaît dans 4 questions d'entraînement réparties sur 1 thèmes, dont Multicœur et synchronisation.

Domaine: Multicœur et synchronisation

S'entraîner : questions sur Sans verrou (lock-free)

Quelle description du problème ABA, qui affecte les structures de données sans verrou utilisant CAS, est correcte ?

  1. ALes deux threads A et B ne peuvent plus s’exécuter qu’en alternance
  2. BLorsque la valeur passe de A à B puis revient à A, CAS ne remarque pas le changement et réussit
  3. CLes deux verrous A et B sont pris dans l’ordre inverse
Afficher la réponse et l'explication

Réponse : B. Lorsque la valeur passe de A à B puis revient à A, CAS ne remarque pas le changement et réussit

Si le pointeur de tête d’une liste chaînée vaut A, il peut arriver que, pendant qu’un thread lit A et prépare son CAS, un autre thread retire A, effectue une opération sur B, puis réinsère un nœud à la même adresse A. Le CAS réussit puisque la valeur est toujours A, mais le contenu de la liste a déjà changé et la structure est corrompue. On l’évite en associant au pointeur un compteur de mises à jour comparé en même temps, ou en utilisant LR/SC.

Quelle propriété caractérise un algorithme sans verrou (lock-free) ?

  1. AMême si un thread s’arrête en cours de route, au moins un des autres threads peut progresser
  2. BTous les threads terminent leur traitement en un nombre d’étapes fixe
  3. CLes données partagées sont mises à jour sans aucune instruction atomique
Afficher la réponse et l'explication

Réponse : A. Même si un thread s’arrête en cours de route, au moins un des autres threads peut progresser

Avec un verrou, si le thread détenteur est arrêté par une interruption ou une faible priorité, tous les autres attendent. Un algorithme sans verrou met à jour directement les données partagées, par exemple par CAS, de sorte qu’un thread n’échoue et ne recommence que lorsqu’un autre a réussi. Globalement, un thread progresse donc toujours. Cependant, ces algorithmes sont difficiles à écrire correctement et exigent de prendre garde notamment au problème ABA.

« Sans verrou (lock-free) » dans les explications

Questions mentionnant « Sans verrou (lock-free) » (4)

  1. Quelle description du problème ABA, qui affecte les structures de données sans verrou utilisant CAS, est correcte ?
  2. Quelle propriété caractérise un algorithme sans verrou (lock-free) ?
  3. Quelle description d’une instruction atomique (instruction indivisible) est correcte ?
  4. Quel est le fonctionnement de l’instruction atomique CAS (compare-and-swap) ?

Termes associés

Problème ABA LR/SC Instruction atomique Compare-and-swap Interruption Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Course aux données (data race) Espionnage de bus (snooping)

Retour au glossaire