Qu'est-ce que Variable de condition ?

Mécanisme de synchronisation qui endort un thread jusqu'à ce qu'une condition soit remplie et le réveille sur notification d'un autre thread. Au réveil, la condition doit être revérifiée.

Nom japonais: 条件変数

« Variable de condition » apparaît dans 1 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 Variable de condition

Lors d’une attente « jusqu’à ce que la file ne soit plus vide » avec une variable de condition, pourquoi revérifier la condition après le réveil avec une instruction while plutôt qu’avec une instruction if ?

  1. AParce que while s’exécute plus vite que if
  2. BParce que la règle interdit d’utiliser une variable de condition avec if
  3. CParce que même réveillé, la condition peut ne pas être remplie : un autre thread peut avoir pris l’élément avant, ou le réveil peut survenir sans raison
Afficher la réponse et l'explication

Réponse : C. Parce que même réveillé, la condition peut ne pas être remplie : un autre thread peut avoir pris l’élément avant, ou le réveil peut survenir sans raison

L’attente sur une variable de condition relâche le verrou et s’endort ; à la réception d’un signal, le thread se réveille, reprend le verrou et revient. Mais entre-temps, un autre thread peut avoir pris le verrou en premier et retiré l’élément de la file. De plus, les implémentations sont autorisées à réveiller un thread sans signal (réveil intempestif). On écrit donc une boucle while qui vérifie la condition après le réveil et attend de nouveau si elle n’est pas remplie.

« Variable de condition » dans les explications

Questions mentionnant « Variable de condition » (1)

  1. Lors d’une attente « jusqu’à ce que la file ne soit plus vide » avec une variable de condition, pourquoi revérifier la condition après le réveil avec une instruction while plutôt qu’avec une instruction if ?

Termes associés

Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Compare-and-swap Course aux données (data race) Espionnage de bus (snooping) Faux partage (false sharing) Instruction atomique Interblocage (deadlock) LR/SC

Retour au glossaire