Multicore en synchronisatie

Waarom volstaat het in C niet om een flagvariabele die tussen threads wordt doorgegeven alleen volatile te maken als synchronisatie?

  1. AOmdat een volatile variabele niet meer door andere threads kan worden gelezen
  2. BOmdat volatile alleen compileroptimalisaties onderdrukt en geen ondeelbaarheid van bewerkingen of zichtbare volgorde voor andere cores garandeert
  3. COmdat een volatile variabele op schijf wordt opgeslagen en daardoor traag wordt
Antwoord en toelichting tonen

Antwoord: B. Omdat volatile alleen compileroptimalisaties onderdrukt en geen ondeelbaarheid van bewerkingen of zichtbare volgorde voor andere cores garandeert

Volatile instrueert de compiler lees- en schrijfacties van een variabele niet weg te laten of samen te voegen, en is oorspronkelijk bedoeld voor bewerkingen op hardwareregisters. Het voorkomt niet dat de CPU de volgorde van geheugenbewerkingen wijzigt, en bewerkingen zoals counter++ worden er niet ondeelbaar door. Vanaf C11 en C++11 garanderen _Atomic en std::atomic zowel ondeelbaarheid als geheugenvolgorde.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. Waarom kan bij _Atomic van C11 en std::atomic van C++11 de geheugenvolgorde (memory order) worden opgegeven?
  2. 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?
  3. Welke eigenschap van een lock-free algoritme is juist?
  4. Welke uitleg over een kritieke sectie is juist?
  5. Welke uitleg over barrièresynchronisatie, gebruikt in parallelle programma's, is juist?

Vergelijkingen bij dit onderwerp