Multicore en synchronisatie
Welke beschrijving van de werking van de atomaire instructie CAS (compare-and-swap) is juist?
- ASchrijft alleen een nieuwe waarde als de waarde in het geheugen gelijk is aan de verwachte waarde, en laat weten of dit is gelukt
- BVergelijkt twee geheugenwaarden en schrijft de grootste naar beide
- 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.