Share via


reader_writer_lock-klasse

Een schrijfvoorkeurwachtrij op basis van lezer-schrijververgrendeling met alleen lokaal draaien. De vergrendeling verleent eerst in - first-out (FIFO) toegang tot schrijvers en benadeelt lezers onder een continue belasting van schrijvers.

Syntaxis

class reader_writer_lock;

Leden

Openbare klassen

Naam Description
reader_writer_lock::scoped_lock Klasse Een exceptions-veilige RAII-wrapper die kan worden gebruikt om vergrendelingsobjecten als schrijver te verkrijgen reader_writer_lock.
reader_writer_lock::scoped_lock_read Klasse Een uitzondering veilige RAII-wrapper die kan worden gebruikt om vergrendelingsobjecten als lezer te verkrijgen reader_writer_lock .

Openbare constructors

Naam Description
lezer-schrijverslot Maakt een nieuw reader_writer_lock object.
~reader_writer_lock Destructor Vernietigt het reader_writer_lock object.

Openbare methoden

Naam Description
vergrendeling Hiermee verkrijgt u de lezer-schrijververgrendeling als schrijver.
lock_read Hiermee verkrijgt u als lezer de lezer-schrijver-slot. Als er schrijvers zijn, moeten actieve lezers wachten totdat ze klaar zijn. De lezer registreert eenvoudig een interesse in de vergrendeling en wacht tot de schrijvers het ontgrendelen.
try_lock Poogt de lezer-schrijver-vergrendeling als schrijver te verkrijgen zonder dat deze blokkeert.
try_lock_read Probeert de lezer-schrijververgrendeling als lezer te verkrijgen zonder te blokkeren.
Ontgrendelen Ontgrendelt de lezer-schrijververgrendeling op basis van wie deze heeft vergrendeld, lezer of schrijver.

Opmerkingen

Zie Synchronisatiegegevensstructuren voor meer informatie.

Overnamehiƫrarchie

reader_writer_lock

Requirements

Koptekst: concrt.h

Naamruimte: concurrentie

slot / vergrendeling / vergrendelen (depending on context)

Hiermee verkrijgt u als schrijver de lezer-schrijver-vergrendeling.

void lock();

Opmerkingen

Het is vaak veiliger om de scoped_lock constructie te gebruiken om als schrijver op een uitzonderingsveilige manier een reader_writer_lock object te vergrendelen en vrij te geven.

Nadat een schrijver de vergrendeling probeert te verkrijgen, worden toekomstige lezers geblokkeerd totdat de schrijvers de vergrendeling hebben verkregen en vrijgegeven. Deze vergrendeling is vertekend naar schrijvers en kan lezers verhongeren onder een voortdurende belasting van schrijvers.

Schrijvers worden geketend, zodat een schrijver die de vergrendeling verlaat de volgende schrijver in de rij vrijgeeft.

Als de vergrendeling al wordt bewaard door de aanroepende context, wordt er een improper_lock uitzondering gegenereerd.

lock_read

Hiermee verkrijgt u de lezer-schrijververgrendeling als lezer. Als er schrijvers zijn, moeten actieve lezers wachten totdat ze klaar zijn. De lezer registreert gewoon een interesse in de vergrendeling en wacht tot schrijvers het vrijgeven.

void lock_read();

Opmerkingen

Het is vaak veiliger om de scoped_lock_read construct te gebruiken om een reader_writer_lock object als lezer op een uitzonderingsveilige manier te verkrijgen en vrij te geven.

Als er schrijvers op de vergrendeling wachten, wacht de lezer totdat alle schrijvers in de rij de vergrendeling hebben verkregen en vrijgegeven. Deze vergrendeling heeft een voorkeur voor schrijvers en kan ten koste gaan van lezers onder een aanhoudende schrijversbelasting.

lezer_schrijver_slot

Maakt een nieuw reader_writer_lock object.

reader_writer_lock();

~lezer_schrijver_sloten

Vernietigt het reader_writer_lock object.

~reader_writer_lock();

Opmerkingen

Het wordt verwacht dat de vergrendeling niet meer wordt vastgehouden wanneer de destructor wordt uitgevoerd. Het toestaan van de lezer-schrijverslot om te laten vernietigen terwijl de vergrendeling nog wordt vastgehouden, resulteert in niet-gedefinieerd gedrag.

reader_writer_lock::scoped_lock klasse

Een exceptions-veilige RAII-wrapper die kan worden gebruikt om vergrendelingsobjecten als schrijver te verkrijgen reader_writer_lock.

class scoped_lock;

scoped_lock::scoped_lock

Hiermee maakt u een scoped_lock object en verkrijgt u het reader_writer_lock object dat als schrijver in de _Reader_writer_lock parameter is doorgegeven. Als de vergrendeling wordt vastgehouden door een andere thread, wordt deze aanroep geblokkeerd.

explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);

Parameterwaarden

_Reader_writer_lock
Het reader_writer_lock object dat moet worden verkregen als schrijver.

scoped_lock::~scoped_lock

Hiermee wordt een reader_writer_lock object vernietigd en wordt de vergrendeling vrijgegeven die in de constructor is geleverd.

~scoped_lock();

reader_writer_lock::scoped_lock_read klasse

Een uitzondering veilige RAII-wrapper die kan worden gebruikt om vergrendelingsobjecten als lezer te verkrijgen reader_writer_lock .

class scoped_lock_read;

scoped_lock_read::scoped_lock_read

Hiermee maakt u een scoped_lock_read object en verkrijgt u het reader_writer_lock object dat als lezer in de _Reader_writer_lock parameter is doorgegeven. Als de vergrendeling wordt vastgehouden door een andere thread als schrijver of als er schrijvers in behandeling zijn, wordt deze aanroep geblokkeerd.

explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);

Parameterwaarden

_Reader_writer_lock
Het reader_writer_lock object dat moet worden verkregen als lezer.

reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor

Hiermee wordt een scoped_lock_read object vernietigd en wordt de vergrendeling vrijgegeven die in de constructor is geleverd.

~scoped_lock_read();

poging_vergrendelen

Poogt de lezer-schrijver-vergrendeling als schrijver te verkrijgen zonder dat deze blokkeert.

Syntaxis

bool try_lock();

Retourwaarde

Als de vergrendeling is verkregen, is de waarde true; anders de waarde false.

poging_lezen_vergrendelen

Probeert de lezer-schrijververgrendeling als lezer te verkrijgen zonder te blokkeren.

bool try_lock_read();

Retourwaarde

Als de vergrendeling is verkregen, is de waarde true; anders de waarde false.

Ontgrendelen

Ontgrendelt de lezer-schrijververgrendeling op basis van wie deze heeft vergrendeld, lezer of schrijver.

void unlock();

Opmerkingen

Als er schrijvers op de vergrendeling wachten, gaat de vrijgave van de vergrendeling altijd naar de volgende schrijver in FIFO-volgorde. Deze vergrendeling heeft een voorkeur voor schrijvers en kan ten koste gaan van lezers onder een aanhoudende schrijversbelasting.

Zie ook

concurrentie Namespace
critical_section-klasse