Multicore en synchronisatie
Waarom volstaat het in C niet om een flagvariabele die tussen threads wordt doorgegeven alleen volatile te maken als synchronisatie?
- AOmdat een volatile variabele niet meer door andere threads kan worden gelezen
- BOmdat volatile alleen compileroptimalisaties onderdrukt en geen ondeelbaarheid van bewerkingen of zichtbare volgorde voor andere cores garandeert
- 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.