Multicore und Synchronisation
Wie arbeitet der atomare Befehl CAS (Compare-and-Swap)?
- AEr schreibt nur dann einen neuen Wert in den Speicher, wenn der Speicherwert dem erwarteten Wert entspricht, und zeigt an, ob dies gelungen ist
- BEr vergleicht die Werte zweier Speicherstellen und schreibt den größeren in beide
- CEr tauscht den Speicherwert und den Registerwert ohne Bedingung aus
Antwort und Erläuterung anzeigen
Antwort: A. Er schreibt nur dann einen neuen Wert in den Speicher, wenn der Speicherwert dem erwarteten Wert entspricht, und zeigt an, ob dies gelungen ist
CAS führt unteilbar aus: „Wenn der Wert an dieser Adresse noch dem erwarteten Wert entspricht, wird er durch den neuen ersetzt.“ Hat ein anderer Thread den Wert zwischen Lesen und Schreiben geändert, schlägt CAS fehl, sodass sich prüfen lässt, dass nicht dazwischen verändert wurde. Bei einem Fehlschlag wird neu gelesen, gerechnet und CAS in einer Schleife wiederholt, wodurch sich gemeinsame Werte ohne Sperre sicher aktualisieren lassen. Entsprechend ist z. B. der Befehl cmpxchg bei x86.