Multicore und Synchronisation
Warum genügt es in C nicht als Synchronisation, eine für den Austausch zwischen Threads verwendete Flag-Variable nur mit volatile zu versehen?
- AWeil mit volatile versehene Variablen von anderen Threads nicht mehr gelesen werden können
- BWeil volatile nur Compiler-Optimierungen unterdrückt und weder die Unteilbarkeit von Operationen noch die für andere Kerne sichtbare Reihenfolge garantiert
- CWeil eine mit volatile versehene Variable auf der Festplatte gespeichert wird und langsam ist
Antwort und Erläuterung anzeigen
Antwort: B. Weil volatile nur Compiler-Optimierungen unterdrückt und weder die Unteilbarkeit von Operationen noch die für andere Kerne sichtbare Reihenfolge garantiert
volatile weist den Compiler an, Lese- und Schreibzugriffe auf eine Variable weder wegzulassen noch zusammenzufassen, und war ursprünglich für den Zugriff auf Hardwareregister gedacht. Es verhindert nicht, dass die CPU die Reihenfolge von Speicheroperationen ändert, und macht auch Operationen wie counter++ nicht unteilbar. Ab C11 und C++11 garantieren _Atomic und std::atomic sowohl Unteilbarkeit als auch Speicherreihenfolge.