Multicore und Synchronisation
Welche Aussage zum ABA-Problem, das bei sperrfreien Datenstrukturen mit CAS auftritt, ist richtig?
- ADie beiden Threads A und B können nur noch abwechselnd ausgeführt werden
- BWenn sich ein Wert von A auf B und wieder zurück auf A ändert, bemerkt CAS die Änderung nicht und gelingt
- CDie beiden Sperren A und B werden in umgekehrter Reihenfolge belegt
Antwort und Erläuterung anzeigen
Antwort: B. Wenn sich ein Wert von A auf B und wieder zurück auf A ändert, bemerkt CAS die Änderung nicht und gelingt
Ist der Kopfzeiger einer verketteten Liste A, kann es vorkommen, dass ein anderer Thread, während ein Thread A liest und CAS vorbereitet, A entfernt, Operationen mit B durchführt und dann wieder einen Knoten mit derselben Adresse A einfügt. CAS gelingt, weil der Wert noch A ist, doch der Listeninhalt hat sich bereits geändert, und die Struktur wird zerstört. Verhindert wird dies, indem man dem Zeiger einen Aktualisierungszähler beifügt und beide gemeinsam vergleicht, oder durch den Einsatz von LR/SC.