Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Übungen zu BS - Dokumentation Aufgabe 4 (WS 2015/16)

Mit Hilfe eines Spinlocks kann man Codeabschnitte serialisieren die echt nebenläufig auf mehreren CPUs laufen. Mehr ...

#include <spinlock.h>

Öffentliche Methoden

 Spinlock ()
 Konstruktor; Initialisierung des Spinlocks als ungesperrt. Mehr ...
 
void lock ()
 Betritt den gesperrten Abschnitt. Ist dieser besetzt, so wird solange aktiv gewartet, bis er betreten werden kann. Mehr ...
 
void unlock ()
 Gibt den gesperrten Abschnitt wieder frei. Mehr ...
 

Ausführliche Beschreibung

Mit Hilfe eines Spinlocks kann man Codeabschnitte serialisieren die echt nebenläufig auf mehreren CPUs laufen.

Die Synchronisation läuft dabei über eine Sperrvariable. Sobald jemand den kritischen Abschnitt betreten will, setzt er die Sperrvariable. Verlässt er den kritischen Abschnitt, so setzt er sie wieder zurück. Ist die Sperrvariable jedoch schon gesetzt, dann wartet er aktiv darauf, dass sie der Besitzer des kritischen Abschnittes beim Verlassen wieder zurücksetzt.

Zur Implementierung können die beiden GCC-Intrinsics __sync_lock_test_and_set(unsigned int* lock_status, unsigned int value) und __sync_lock_release(unsigned int* lock_status) verwendet werden. Diese werden vom Compiler in die architekturspezifischen atomaren Operationen übersetzt.

Eintrag im GCC Manual über Atomic Builtins

Beschreibung der Konstruktoren und Destruktoren

Spinlock::Spinlock ( )
inline

Konstruktor; Initialisierung des Spinlocks als ungesperrt.

Dokumentation der Elementfunktionen

void Spinlock::lock ( )
inline

Betritt den gesperrten Abschnitt. Ist dieser besetzt, so wird solange aktiv gewartet, bis er betreten werden kann.

void Spinlock::unlock ( )
inline

Gibt den gesperrten Abschnitt wieder frei.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: