Multicore und Synchronisation

Welche Aufgabe haben Memory-Barrier-(Fence-)Befehle?

  1. ASie garantieren, dass Speicheroperationen vor der Barriere für andere Kerne vor den Operationen nach der Barriere sichtbar werden
  2. BSie unterteilen den Speicher physisch und verbieten den Zugriff
  3. CSie halten die Programmausführung an, bis alle Threads versammelt sind
Antwort und Erläuterung anzeigen

Antwort: A. Sie garantieren, dass Speicheroperationen vor der Barriere für andere Kerne vor den Operationen nach der Barriere sichtbar werden

Da die CPU die Reihenfolge von Speicheroperationen ändern kann, braucht es eine Anweisung, die dies verhindert, wenn Daten mit anderen Kernen in einer festgelegten Reihenfolge ausgetauscht werden sollen. Eine Memory Barrier lässt alle Lese- und Schreibzugriffe davor abschließen (und für andere Kerne sichtbar werden), bevor die Zugriffe danach erfolgen. Auch im Erwerb und in der Freigabe von Sperren ist die Wirkung einer Barriere enthalten, sodass durch Sperren geschützte Variablen korrekt weitergegeben werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Im obigen Code bereitet Thread 1 data vor und signalisiert dies mit flag; Thread 2 liest data, nachdem er flag gesehen hat. Was ist nötig, damit Thread 2 auf einer CPU mit schwachem Speicherkonsistenzmodell sicher 42 liest?
  2. Was gilt für Speicheroperationen mit Acquire- und Release-Semantik?
  3. Warum genügt es in C nicht als Synchronisation, eine für den Austausch zwischen Threads verwendete Flag-Variable nur mit volatile zu versehen?
  4. Warum lässt sich bei _Atomic in C11 und std::atomic in C++11 die Speicherreihenfolge (Memory Order) angeben?
  5. 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?

Vergleiche zu diesem Thema