Multicœur et synchronisation

Quelle affirmation sur les opérations mémoire à sémantique d’acquisition (acquire) et de libération (release) est correcte ?

  1. AL’acquisition et la libération sont toutes deux les barrières les plus lourdes, qui arrêtent complètement toutes les lectures et écritures
  2. BL’acquisition alloue de la mémoire et la libération exécute free
  3. CLes lectures et écritures qui suivent une acquisition ne remontent pas avant elle, et celles qui précèdent une libération ne descendent pas après elle
Afficher la réponse et l'explication

Réponse : C. Les lectures et écritures qui suivent une acquisition ne remontent pas avant elle, et celles qui précèdent une libération ne descendent pas après elle

L’opération de prise d’un verrou a une sémantique d’acquisition, celle de sa restitution une sémantique de libération. Les opérations postérieures à l’acquisition ne fuient pas avant la prise du verrou, et celles antérieures à la libération ne fuient pas après sa restitution ; les lectures et écritures de la zone protégée restent donc à l’intérieur de celle-ci. Moins contraignantes qu’une barrière complète bloquant les deux sens, elles laissent le matériel exploiter les autres réordonnancements pour préserver les performances.

S'entraîner sur ce thème Retour au thème

Autres questions sur Multicœur et synchronisation

  1. En C, pourquoi ajouter seulement volatile à une variable drapeau échangée entre threads est-il insuffisant comme synchronisation ?
  2. Pourquoi _Atomic de C11 et std::atomic de C++11 permettent-ils de spécifier un ordre mémoire ?
  3. Quelle comparaison entre le « verrouillage à gros grain », qui protège toute une grande structure de données par un seul verrou, et le « verrouillage à grain fin », qui protège chaque partie par un verrou distinct, est correcte ?
  4. Quelle propriété caractérise un algorithme sans verrou (lock-free) ?
  5. Quelle description de la section critique est correcte ?

Comparatifs sur ce thème