Wat is Atomaire instructie?

Instructie die lezen en schrijven van het geheugen uitvoert als één bewerking die niet door andere cores kan worden onderbroken. Voorbeelden: CAS, fetch-and-add en LR/SC.

Japanse benaming: アトミック命令

“Atomaire instructie” komt voor in 4 oefenvragen uit 1 onderwerpen, bijv. Multicore en synchronisatie.

Vakgebied: Multicore en synchronisatie

Nu oefenen: vragen over Atomaire instructie

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.

Waarom wordt bij een spinlock niet meteen met een atomaire instructie de lockvariabele proberen te wijzigen, maar wordt normaal met gewoon lezen gewacht tot de lock vrij lijkt en dan pas een atomaire instructie gebruikt (test-and-test-and-set)?

  1. AOmdat gewoon lezen nauwkeuriger is dan een atomaire instructie
  2. BOmdat een atomaire instructie maar één keer per programma kan worden gebruikt
  3. COmdat bij alleen lezen in de eigen cache kan worden gewacht, zodat het verkeer van cacheregels tussen cores sterk afneemt
Antwoord en toelichting tonen

Antwoord: C. Omdat bij alleen lezen in de eigen cache kan worden gewacht, zodat het verkeer van cacheregels tussen cores sterk afneemt

Een atomaire instructie omvat een schrijfactie, dus als een wachtende thread die herhaaldelijk uitvoert, strijden de cores telkens om de regel in de M-toestand en worden kopieën in andere cores steeds ongeldig gemaakt. Met gewoon lezen blijft elke core alleen zijn S-kopie in de eigen cache lezen, en ontstaat geen verkeer. Alleen wanneer de lock vrijkomt en de waarde verandert, wordt met een atomaire instructie geprobeerd hem te nemen.

“Atomaire instructie” in de toelichting

Vragen met “Atomaire instructie” (4)

  1. Welke beschrijving van de werking van de atomaire instructie CAS (compare-and-swap) is juist?
  2. Waarom wordt bij een spinlock niet meteen met een atomaire instructie de lockvariabele proberen te wijzigen, maar wordt normaal met gewoon lezen gewacht tot de lock vrij lijkt en dan pas een atomaire instructie gebruikt (test-and-test-and-set)?
  3. Welke uitleg over atomaire instructies (ondeelbare instructies) is juist?
  4. Welke uitleg over een spinlock is juist?

Verwante termen

Compare-and-swap Spinlock Numerieke apertuur (NA) LR/SC Lock-free CPU-tijd ABA-probleem Acquire-release Barrièresynchronisatie Conditievariabele

Naar de woordenlijst