Multicore en synchronisatie

Waarom kan bij _Atomic van C11 en std::atomic van C++11 de geheugenvolgorde (memory order) worden opgegeven?

  1. AOm aan te geven waar in het geheugen de atomaire variabele wordt geplaatst
  2. BOmdat door alleen de benodigde ordeningsgarantie te kiezen onnodige barrières worden vermeden en de prestaties behouden blijven
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. 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?
  2. Welke eigenschap van een lock-free algoritme is juist?
  3. Welke uitleg over een kritieke sectie is juist?
  4. Welke uitleg over barrièresynchronisatie, gebruikt in parallelle programma's, is juist?
  5. Als 64 cores voortdurend gelijktijdig één gedeelde teller met atomaire instructies bijwerken, wordt het niet sneller door meer cores. Wat is de belangrijkste reden?

Vergelijkingen bij dit onderwerp