Fetch-and-add

Fetch-and-add i​st ein Fachbegriff d​er Informatik, welcher e​in Verfahren z​ur atomaren Veränderung e​ines Speicherbereichs beschreibt.

Arbeitsweise

Das Verfahren wird mithilfe eines Funktionsaufrufs, der vom Betriebssystem verarbeitet wird, implementiert. Der Inhalt einer Speicherzelle wird ausgelesen und im selben Speicherzyklus durch einen neuen Wert überschrieben, der um 1 größer ist. Der Vorteil ist, dass andere Prozesse den Wert der Variable während dieses Vorgangs nicht verändern können. Inkonsistenzen und Datenverluste sind somit ausgeschlossen. Für die Verwendung von Fetch-and-add muss eine entsprechende Hardware-Unterstützung vorhanden sein.

Implementierung

Beispielhaft soll eine mögliche Umsetzung der Technik in der Programmiersprache C angegeben werden. Je nach verwendeter Programmiersprache kann sich der Aufruf unterscheiden.

<<atomic>> int FetchAndAdd(address alterWert) {
    int wert = *alterWert;
    *alterWert = wert + 1;
    return wert;
}

Für d​iese Implementierung w​ird ein Zeiger a​uf die Speicherzelle, d​ie verändert werden soll, verwendet (hier alterWert)

Abgrenzung zu anderen Verfahren

Neben Fetch-and-Add gibt es noch weitere Möglichkeiten, exklusiven Zugriff auf Speicherbereiche zu gewähren. So reicht es bei Einprozessorsystemen, die Ausführung von Interrupts zu verhindern, während der Speicherinhalt durch einen Prozess verändert wird. Auf Systemen mit mehreren Prozessoren (Multicore-Architekturen) reicht dieses Vorgehen jedoch nicht aus.

Eine weitere Alternative z​u Fetch-and-add i​st Compare-and-swap.

Literatur

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.