Wat is Compare-and-swap?

Atomaire instructie die alleen een nieuwe waarde schrijft als de waarde in het geheugen gelijk is aan de verwachte waarde. Ook CAS genoemd. Bij falen wordt opnieuw gelezen en herhaald in een lus, zodat updates zonder lock mogelijk zijn.

Japanse benaming: コンペア・アンド・スワップ

“Compare-and-swap” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Multicore en synchronisatie.

Vakgebied: Multicore en synchronisatie

Nu oefenen: vragen over Compare-and-swap

Welke beschrijving van de werking van de atomaire instructie CAS (compare-and-swap) is juist?

  1. ASchrijft alleen een nieuwe waarde als de waarde in het geheugen gelijk is aan de verwachte waarde, en laat weten of dit is gelukt
  2. BVergelijkt twee geheugenwaarden en schrijft de grootste naar beide
  3. CWisselt de waarde in het geheugen en de waarde in het register onvoorwaardelijk om
Antwoord en toelichting tonen

Antwoord: A. Schrijft alleen een nieuwe waarde als de waarde in het geheugen gelijk is aan de verwachte waarde, en laat weten of dit is gelukt

CAS voert ondeelbaar uit: 'als de waarde op dit adres nog de verwachte waarde is, verander hem dan in de nieuwe waarde'. Als een andere thread de waarde tussen lezen en schrijven heeft veranderd, mislukt het, zodat bijwerken kan terwijl wordt gecontroleerd dat er niets is gewijzigd. Bij mislukking wordt opnieuw gelezen en berekend en wordt CAS herhaald in een lus, zodat een gedeelde waarde veilig zonder lock kan worden bijgewerkt. De cmpxchg-instructie van x86 is hiervan een voorbeeld.

“Compare-and-swap” in de toelichting

Vragen met “Compare-and-swap” (2)

  1. Welke beschrijving van de werking van de atomaire instructie CAS (compare-and-swap) is juist?
  2. Welke uitleg over atomaire instructies (ondeelbare instructies) is juist?

Verwante termen

Atomaire instructie Numerieke apertuur (NA) LR/SC Lock-free ABA-probleem Acquire-release Barrièresynchronisatie Conditievariabele Data race Deadlock

Naar de woordenlijst