reader_writer_lock-Klasse
Eine im Writer festgelegte, warteschlangenbasierte Lese-/Schreibsperre mit ausschließlich lokalem Spinning. Die Sperre gewährt "First In, First Out"-Zugriff (FIFO-Zugriff) auf Writer und blockiert Reader unter einer fortlaufenden Last von Writern.
Syntax
class reader_writer_lock;
Member
Öffentliche Klassen
Name | Beschreibung |
---|---|
reader_writer_lock::scoped_lock Klasse | Ein ausnahmesicherer RAII-Wrapper, der zum Abrufen reader_writer_lock von Sperrobjekten als Writer verwendet werden kann. |
reader_writer_lock::scoped_lock_read Klasse | Ein ausnahmesicherer RAII-Wrapper, der zum Abrufen reader_writer_lock von Sperrobjekten als Leser verwendet werden kann. |
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
reader_writer_lock | Erstellt ein neues reader_writer_lock -Objekt. |
~reader_writer_lock Destruktor | Zerstört das reader_writer_lock -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
lock | Erwirbt die Leser-Writer-Sperre als Autor. |
lock_read | Erwirbt die Lese-Writer-Sperre als Leser. Wenn es Autoren gibt, müssen aktive Leser warten, bis sie fertig sind. Der Leser registriert einfach ein Interesse an der Sperre und wartet darauf, dass Autoren es freigeben. |
try_lock | Versucht, die Lese-Writer-Sperre als Writer ohne Blockierung zu erwerben. |
try_lock_read | Versucht, die Lese-Writer-Sperre als Leser ohne Blockierung zu erwerben. |
unlock | Entsperrt die Reader-Writer-Sperre basierend auf der Sperrung, des Lesers oder Autors. |
Hinweise
Weitere Informationen finden Sie unter "Synchronisierungsdatenstrukturen".
Vererbungshierarchie
reader_writer_lock
Anforderungen
Kopfzeile: concrt.h
Namespace: Parallelität
lock
Erwirbt die Leser-Writer-Sperre als Autor.
void lock();
Hinweise
Es ist oft sicherer, das scoped_lock-Konstrukt zu verwenden, um ein reader_writer_lock
Objekt als Autor auf eine ausnahmesichere Weise zu erwerben und freizugeben.
Nachdem ein Autor versucht, die Sperre zu erwerben, werden alle zukünftigen Leser blockiert, bis die Autoren die Sperre erfolgreich erworben und freigegeben haben. Diese Sperre ist auf Autoren ausgerichtet und kann Leser unter einer kontinuierlichen Last von Autoren verhungern.
Autoren werden verkettet, sodass ein Autor, der die Sperre verlässt, den nächsten Schriftsteller in Zeile loslässt.
Wenn die Sperre bereits im aufrufenden Kontext gespeichert ist, wird eine improper_lock Ausnahme ausgelöst.
lock_read
Erwirbt die Lese-Writer-Sperre als Leser. Wenn es Autoren gibt, müssen aktive Leser warten, bis sie fertig sind. Der Leser registriert einfach ein Interesse an der Sperre und wartet darauf, dass Autoren es freigeben.
void lock_read();
Hinweise
Es ist oft sicherer, das scoped_lock_read-Konstrukt zu verwenden, um ein reader_writer_lock
Objekt als Leser auf sichere Weise zu erwerben und freizugeben.
Wenn Autoren auf die Sperre warten, wartet der Leser, bis alle Autoren in der Zeile die Sperre erworben und freigegeben haben. Diese Sperre ist auf Autoren ausgerichtet und kann Leser unter einer kontinuierlichen Last von Autoren verhungern.
reader_writer_lock
Erstellt ein neues reader_writer_lock
-Objekt.
reader_writer_lock();
~reader_writer_lock
Zerstört das reader_writer_lock
-Objekt.
~reader_writer_lock();
Hinweise
Es wird erwartet, dass die Sperre beim Ausführen des Destruktors nicht mehr gehalten wird. Wenn der Leser-Writer die Sperre destruktieren kann, führt dies zu einem nicht definierten Verhalten.
reader_writer_lock::scoped_lock Klasse
Ein ausnahmesicherer RAII-Wrapper, der zum Abrufen reader_writer_lock
von Sperrobjekten als Writer verwendet werden kann.
class scoped_lock;
scoped_lock::scoped_lock
Erstellt ein scoped_lock
Objekt und erwirbt das objekt, das reader_writer_lock
_Reader_writer_lock
als Writer im Parameter übergeben wird. Wenn die Sperre von einem anderen Thread gehalten wird, wird dieser Aufruf blockiert.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Parameter
_Reader_writer_lock
Das reader_writer_lock
Objekt, das als Autor erworben werden soll.
scoped_lock::~scoped_lock
Zerstört ein reader_writer_lock
Objekt und gibt die im Konstruktor angegebene Sperre frei.
~scoped_lock();
reader_writer_lock::scoped_lock_read Klasse
Ein ausnahmesicherer RAII-Wrapper, der zum Abrufen reader_writer_lock
von Sperrobjekten als Leser verwendet werden kann.
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
Erstellt ein scoped_lock_read
Objekt und erwirbt das objekt, das reader_writer_lock
_Reader_writer_lock
als Leser im Parameter übergeben wird. Wenn die Sperre von einem anderen Thread als Autor gehalten wird oder ausstehende Autoren vorhanden sind, wird dieser Aufruf blockiert.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Parameter
_Reader_writer_lock
Das reader_writer_lock
Objekt, das als Leser erworben werden soll.
reader_writer_lock::scoped_lock_read::~scoped_lock_read Destruktor
Zerstört ein scoped_lock_read
Objekt und gibt die im Konstruktor angegebene Sperre frei.
~scoped_lock_read();
try_lock
Versucht, die Lese-Writer-Sperre als Writer ohne Blockierung zu erwerben.
Syntax
bool try_lock();
Rückgabewert
Wenn die Sperre abgerufen wurde, wird der Wert true
; andernfalls der Wert false
.
try_lock_read
Versucht, die Lese-Writer-Sperre als Leser ohne Blockierung zu erwerben.
bool try_lock_read();
Rückgabewert
Wenn die Sperre abgerufen wurde, wird der Wert true
; andernfalls der Wert false
.
Entsperren
Entsperrt die Reader-Writer-Sperre basierend auf der Sperrung, des Lesers oder Autors.
void unlock();
Hinweise
Wenn Autoren auf die Sperre warten, wird die Freigabe der Sperre immer zum nächsten Autor in FIFO-Reihenfolge gehen. Diese Sperre ist auf Autoren ausgerichtet und kann Leser unter einer kontinuierlichen Last von Autoren verhungern.