Multicore en synchronisatie

Wat is de juiste rol van een geheugenbarrière-instructie (fence)?

  1. AGaranderen dat geheugenbewerkingen vóór de barrière voor andere cores eerder zichtbaar zijn dan bewerkingen na de barrière
  2. BHet geheugen fysiek afbakenen en toegang verbieden
  3. CDe uitvoering van het programma stoppen tot alle threads gelijk zijn
Antwoord en toelichting tonen

Antwoord: A. Garanderen dat geheugenbewerkingen vóór de barrière voor andere cores eerder zichtbaar zijn dan bewerkingen na de barrière

Omdat de CPU de volgorde van geheugenbewerkingen kan wijzigen, is voor het in een vaste volgorde uitwisselen van gegevens met andere cores een instructie nodig die dat tegenhoudt. Een geheugenbarrière laat eerst alle voorgaande lees- en schrijfacties voltooien (zichtbaar maken voor andere cores) en pas daarna de volgende uitvoeren. Ook in het nemen en vrijgeven van locks zit het effect van barrières, zodat met een lock beschermde variabelen correct worden doorgegeven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. In bovenstaande code bereidt thread 1 data voor en meldt dat met flag, en leest thread 2 data nadat hij flag heeft gezien. Wat is nodig om op een CPU met zwak geheugenconsistentiemodel zeker te zijn dat thread 2 de waarde 42 leest?
  2. Wat is juist over geheugenbewerkingen met acquire- en release-betekenis?
  3. Waarom volstaat het in C niet om een flagvariabele die tussen threads wordt doorgegeven alleen volatile te maken als synchronisatie?
  4. Waarom kan bij _Atomic van C11 en std::atomic van C++11 de geheugenvolgorde (memory order) worden opgegeven?
  5. Welke vergelijking van 'grofkorrelige locks', waarbij een grote datastructuur als geheel door één lock wordt beschermd, en 'fijnkorrelige locks', waarbij delen elk door een eigen lock worden beschermd, is juist?

Vergelijkingen bij dit onderwerp