OOStuBS/MPStuBS
|
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. | |
void | unlock () |
Gibt den gesperrten Abschnitt wieder frei. Mehr ... | |
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 beim Versuch des Betretens jedoch schon gesetzt, dann wartet der Aufrufer 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.
|
inline |
Konstruktor; Initialisierung des Spinlocks als ungesperrt.
|
inline |
Gibt den gesperrten Abschnitt wieder frei.