Compare-and-swap

Compare-and-swap

Compare-and-Swap (CAS) (engl. für „Vergleichen und Tauschen“) -Instruktionen werden in der Informatik verwendet, um Locking- und Synchronisationsoperationen zu implementieren. Eine Speicherstelle wird mit einem vorgegebenen Wert verglichen, und bei Übereinstimmung mit einem neuen Wert überschrieben. Am Rückgabewert muss abzulesen sein, ob der Tausch ausgeführt wurde.

Die CAS-Instruktion ist eine atomare Operation der CPU, d. h. ihr Ablauf kann und darf von keiner anderen Operation unterbrochen werden. Auf Intel-x86- und -Itanium-Prozessoren ist dies die CMPXCHG-Instruktion.

Andere atomare CPU-Instruktionen, die in ähnlicher Weise verwendet werden können, sind z. B. test-and-set und fetch-and-add. Auf RISC-Architekturen ist diese Operation meist als Load-Link/Store-Conditional (LL/SC) implementiert, da die RISC-Philosophie kombinierte read-modify-write Befehle nicht erlaubt. LL/SC hat auch eine etwas enger gefasste Semantik, da es auch nicht-verändernde Zugriffe auf die referenzierte Speicherstelle erkennen kann.

Inhaltsverzeichnis

Anwendung

CAS wird zur Implementierung von Lockingobjekten, wie Semaphoren und Mutexen, und von nebenläufigen Datenstrukturenobjekten verwendet.

Ein simples Mutex-Schema (gegenseitiger Ausschluss) lässt sich per CAS über eine einfache Speicherstelle realisieren, die von mehreren Prozessen bzw. Threads geteilt wird. Möchte ein Thread in einen kritischen Abschnitt eintreten, versucht er per CAS atomar eine 0 (Mutex ungesperrt) durch eine 1 zu ersetzen. War das CAS erfolgreich, konnte also eine 1 in die Speicherstelle geschrieben werden, hat der Thread exklusiven Zugriff auf die geschützten Betriebsmittel. Alle anderen CAS-Operationen auf der Speicherstelle schlagen fehl, so dass die jeweiligen Threads aktiv warten oder die Kontrolle an die Prozessverwaltung des Betriebssystems abgeben müssen. Ein solches schnelles Mutex-Schema, in dem die Mitwirkung des Betriebssystems auf ein Minimum reduziert wird, ist z. B. als Futex (fast userspace mutex) im Linux-Betriebssystem implementiert.

Nebenläufige Datenstrukturobjekte können z. B. mit dem Read-Copy-Update-Schema implementiert werden. Dabei ist der Lesezugriff immer erlaubt; Schreibzugriffe werden zunächst auf einer Teilkopie der Datenstruktur ausgeführt, die dann atomar wieder in die ursprüngliche Struktur eingehängt wird.

In einem klassischen Aufsatz zeigte Maurice Herlihy 1991, dass CAS-Instruktionen zu einer Klasse von Synchronisationsobjekten gehören, die die Implementierung wartezeit-freier, nebenläufiger Datenstrukturobjekte (wait-free concurrent data object) für eine unbeschränkte Anzahl von nebenläufigen Prozessen erlaubt.[1]

Implementierung

Da der ununterbrochene Ablauf der Operation garantiert sein muss, muss die CAS-Instruktion auf Hardware-Ebene implementiert sein. Der folgende Pseudocode ist eine Veranschaulichung.

<< atomare Operation >>
function CompareAndSwap(speicherstelle, alt, neu) {
    if *speicherstelle == alt then
        *speicherstelle := neu
        return true
    else
        return false
}

Da Speicher manipuliert wird, muss in speichergekoppelten Mehrprozessorsystemen (SMP) ein Verfahren implementiert sein, das die Kohärenz des Speichers und der einzelnen CPU Caches über Prozessorgrenzen hinweg gewährleistet (siehe Cache-Kohärenz).

Siehe auch

Einzelnachweise

  1. Maurice Herlihy: Wait-free synchronization. In: ACM Trans. Program. Lang. Syst.. 13, Nr. 1, January, 1991, S. 124-149. Abgerufen am 20.05.

Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Compare-and-swap — est une instruction atomique utilisée dans les systèmes multiprocesseurs ou multi cœurs utilisant une mémoire partagée. Elle compare la valeur stockée à une adresse mémoire donnée à l un de ses arguments et, en cas d égalité, écrit une nouvelle… …   Wikipédia en Français

  • Compare-and-swap — In computer science, the compare and swap (CAS) CPU instruction is a special instruction that atomically compares the contents of a memory location to a given value and, only if they are the same, modifies the contents of that memory location to… …   Wikipedia

  • Double compare-and-swap — (DCAS or CAS2) is an atomic primitive proposed to support certain concurrent programming techniques. DCAS takes two not necessarily contiguous memory locations and writes new values into them only if they match pre supplied expected values; as… …   Wikipedia

  • Double Compare And Swap — (DCAS or CAS2) is an atomic primitive proposed to support certain concurrent programming techniques. DCAS takes two memory locations and writes new values into them only if they match pre supplied expected values; as such, it is an extension of… …   Wikipedia

  • Lock-free and wait-free algorithms — In contrast to algorithms that protect access to shared data with locks, lock free and wait free algorithms are specially designed to allow multiple threads to read and write shared data concurrently without corrupting it. Lock free refers to the …   Wikipedia

  • Test-and-set — In computer science, the test and set instruction is an instruction used to both test and (conditionally) write to a memory location as part of a single atomic (i.e. non interruptible) operation. This means setting a value, but first performing… …   Wikipedia

  • Fetch-and-add — In computer science, the fetch and add CPU instruction is a special instruction that atomically modifies the contents of a memory location. It is used to implement Mutual exclusion and concurrent algorithms in multiprocessor systems.In… …   Wikipedia

  • Fetch-and-add — ist ein Fachbegriff der Informatik, welcher ein Verfahren zur atomaren Veränderung eines Speicherbereichs beschreibt. Inhaltsverzeichnis 1 Arbeitsweise 2 Implementierung 3 Abgrenzung zu anderen Verfahren …   Deutsch Wikipedia

  • Interest rate cap and floor — Interest rate c An interest rate cap is a derivative in which the buyer receives payments at the end of each period in which the interest rate exceeds the agreed strike price. An example of a cap would be an agreement to receive a payment for… …   Wikipedia

  • Federal takeover of Fannie Mae and Freddie Mac — Fannie Mae headquarters at 3900 Wisconsin Avenue, NW in Washington, D.C. The federal takeover of Fannie Mae and Freddie Mac refers to the placing into conservatorship of government sponsored enterprises Fannie Mae and Freddie Mac by the U.S.… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”