Läs–ändra–skriv
Inom datavetenskap är läs–modifiera–skriv en klass av atomoperationer (som test-and-set , fetch-and-add och compare -and-swap ) som både läser en minnesplats och skriver ett nytt värde in i den samtidigt, antingen med ett helt nytt värde eller någon funktion av det tidigare värdet. Dessa operationer förhindrar tävlingsförhållanden i flertrådsapplikationer. Vanligtvis används de för att implementera mutexes eller semaforer . Dessa atomoperationer används också flitigt vid icke-blockerande synkronisering .
Maurice Herlihy (1991) rangordnar atomoperationer efter deras konsensusnummer , enligt följande:
- ∞ : minne-till-minne flytta och byta, utökad kö, jämföra-och-byta , hämta-och-nackdelar, sticky byte, load-link/store-conditional (LL/SC)
- 2 n − 2 : n -registeruppgift
- 2 : testa och ställa in , byta, hämta och lägga till , köa, stapla
- 1 : atomläs och atomskriv
Det är omöjligt att implementera en operation som kräver ett givet konsensusnummer med endast operationer med ett lägre konsensusnummer, oavsett hur många sådana operationer man använder. Läs-modifiera-skriv-instruktioner ger ofta oväntade resultat när de används på I/O- enheter, eftersom en skrivoperation kanske inte påverkar samma interna register som skulle nås i en läsoperation.
Denna term är också associerad med RAID- nivåer som utför faktiska skrivoperationer som atomära läs-modifiera-skrivsekvenser. Sådana RAID-nivåer inkluderar RAID 4 , RAID 5 och RAID 6 .
Se även