Multicore en synchronisatie
Waarom kan bij _Atomic van C11 en std::atomic van C++11 de geheugenvolgorde (memory order) worden opgegeven?
- AOm aan te geven waar in het geheugen de atomaire variabele wordt geplaatst
- BOmdat door alleen de benodigde ordeningsgarantie te kiezen onnodige barrières worden vermeden en de prestaties behouden blijven
- COm de volgorde waarin threads worden uitgevoerd vooraf vast te leggen
Antwoord en toelichting tonen
Antwoord: B. Omdat door alleen de benodigde ordeningsgarantie te kiezen onnodige barrières worden vermeden en de prestaties behouden blijven
Bewerkingen op atomaire variabelen zijn standaard sequentieel consistent (memory_order_seq_cst), wat het begrijpelijkst is maar de meeste barrièrelast geeft. Voor een eenvoudige teller volstaat ondeelbaarheid, dus relaxed, en voor een flag waarmee gegevens worden doorgegeven volstaan acquire en release. De compiler genereert op basis van de opgave de minimaal benodigde instructies voor het geheugenmodel van de CPU.