Multicore und Synchronisation

Warum lässt sich bei _Atomic in C11 und std::atomic in C++11 die Speicherreihenfolge (Memory Order) angeben?

  1. AUm anzugeben, wo im Speicher die atomare Variable abgelegt wird
  2. BWeil durch die Wahl nur der benötigten Reihenfolgegarantie unnötige Barrieren vermieden und die Leistung erhalten werden können
  3. CUm die Reihenfolge, in der Threads ausgeführt werden, vorab festzulegen
Antwort und Erläuterung anzeigen

Antwort: B. Weil durch die Wahl nur der benötigten Reihenfolgegarantie unnötige Barrieren vermieden und die Leistung erhalten werden können

Operationen auf atomaren Variablen sind standardmäßig sequentiell konsistent (memory_order_seq_cst), was am verständlichsten ist, aber den Aufwand für Barrieren erhöht. Für einen einfachen Zähler genügt Unteilbarkeit, also relaxed; für ein Flag, das Daten weitergibt, reichen acquire und release. Der Compiler erzeugt entsprechend der Angabe die für das Speichermodell der CPU mindestens nötigen Befehle.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. 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?
  2. Welche Eigenschaft sperrfreier (lock-free) Algorithmen ist richtig?
  3. Welche Aussage zum kritischen Abschnitt (Critical Section) ist richtig?
  4. Welche Aussage zur in parallelen Programmen verwendeten Barrierensynchronisation ist richtig?
  5. Aktualisieren 64 Kerne einen einzigen gemeinsamen Zähler fortwährend gleichzeitig mit atomaren Befehlen, wird es auch mit mehr Kernen nicht schneller. Was ist der Hauptgrund?

Vergleiche zu diesem Thema