Multicore und Synchronisation
Warum lässt sich bei _Atomic in C11 und std::atomic in C++11 die Speicherreihenfolge (Memory Order) angeben?
- AUm anzugeben, wo im Speicher die atomare Variable abgelegt wird
- BWeil durch die Wahl nur der benötigten Reihenfolgegarantie unnötige Barrieren vermieden und die Leistung erhalten werden können
- 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.