Multicœur et synchronisation
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 ?
- AParce que while s’exécute plus vite que if
- BParce que la règle interdit d’utiliser une variable de condition avec if
- 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.
Continuer : 9 autres questions sur Multicœur et synchronisation