Multicore und Synchronisation

Was gilt für Speicheroperationen mit Acquire- und Release-Semantik?

  1. AAcquire und Release sind beide die schwerste Barriere, die alle Lese- und Schreibzugriffe vollständig anhält
  2. BAcquire reserviert Speicher, Release gibt ihn per free frei
  3. CZugriffe nach einem Acquire werden nicht vor dieses verschoben, und Zugriffe vor einem Release werden nicht hinter dieses verschoben
Antwort und Erläuterung anzeigen

Antwort: C. Zugriffe nach einem Acquire werden nicht vor dieses verschoben, und Zugriffe vor einem Release werden nicht hinter dieses verschoben

Die Operation beim Erwerb einer Sperre hat Acquire-Semantik, die beim Abgeben Release-Semantik. Operationen nach dem Acquire rutschen nicht vor den Erwerb der Sperre, und Operationen vor dem Release rutschen nicht hinter das Abgeben der Sperre, sodass die Zugriffe des durch die Sperre geschützten Bereichs innerhalb dieses Bereichs bleiben. Da sie weniger einschränken als eine vollständige Barriere in beiden Richtungen, kann die Hardware die übrigen Umordnungen nutzen und die Leistung erhalten.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Warum genügt es in C nicht als Synchronisation, eine für den Austausch zwischen Threads verwendete Flag-Variable nur mit volatile zu versehen?
  2. Warum lässt sich bei _Atomic in C11 und std::atomic in C++11 die Speicherreihenfolge (Memory Order) angeben?
  3. Welche Aussage im Vergleich von „grobkörnigem Sperren“, bei dem eine gesamte große Datenstruktur mit einer Sperre geschützt wird, und „feinkörnigem Sperren“, bei dem Teile mit getrennten Sperren geschützt werden, ist richtig?
  4. Welche Eigenschaft sperrfreier (lock-free) Algorithmen ist richtig?
  5. Welche Aussage zum kritischen Abschnitt (Critical Section) ist richtig?

Vergleiche zu diesem Thema