Freigeben über


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.

Siehe auch

Concurrency-Namespace
critical_section-Klasse