Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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.