reader_writer_lock – třída
Zámek zapisovače čtení na základě fronty s předvolbou zápisu pro zápis do fronty s místním otáčením. Zámek uděluje přístup k autorům a čtenářům v nepřetržitém zatížení spisovatelů ( FIFO).
Syntaxe
class reader_writer_lock;
Členové
Veřejné třídy
Název | Popis |
---|---|
reader_writer_lock::scoped_lock – třída | Výjimkou je bezpečný obálka RAII, která se dá použít k získání reader_writer_lock uzamčených objektů jako zapisovače. |
reader_writer_lock::scoped_lock_read – třída | Výjimkou je bezpečný obálka RAII, která se dá použít k získání reader_writer_lock uzamčených objektů jako čtenáře. |
Veřejné konstruktory
Název | Popis |
---|---|
reader_writer_lock | Vytvoří nový reader_writer_lock objekt. |
~reader_writer_lock Destruktor | reader_writer_lock Zničí objekt. |
Veřejné metody
Název | Popis |
---|---|
lock | Získá zámek pro čtení a zapisovač jako zapisovač. |
lock_read | Získá zámek čtenář-zapisovač jako čtenář. Pokud existují autoři, aktivní čtenáři musí počkat, až se dokončí. Čtenář jednoduše zaregistruje zájem o zámek a čeká, až ho autoři uvolní. |
try_lock | Pokusí se získat zámek pro čtení a zapisovač jako zapisovač bez blokování. |
try_lock_read | Pokusí se získat zámek pro čtení a zapisovač jako čtenář bez blokování. |
odemknout | Odemkne zámek pro čtení a zapisovač na základě toho, kdo ho zamkl, čtečku nebo zapisovač. |
Poznámky
Další informace naleznete v tématu Synchronizace datových struktur.
Hierarchie dědičnosti
reader_writer_lock
Požadavky
Hlavička: concrt.h
Obor názvů: souběžnost
lock
Získá zámek pro čtení a zapisovač jako zapisovač.
void lock();
Poznámky
Často je bezpečnější využívat konstruktor scoped_lock k získání a uvolnění reader_writer_lock
objektu jako zapisovač bezpečným způsobem.
Po pokusu o získání zámku se všichni budoucí čtenáři zablokují, dokud autoři úspěšně nezískali a uvolní zámek. Tento zámek je zkreslený vůči autorům a může hladovět čtenáře v nepřetržitém zatížení spisovatelů.
Zapisovače jsou zřetězený tak, aby zapisovač ukončující zámek vydal další zapisovač v řádku.
Pokud zámek již existuje v kontextu volání, vyvolá se výjimka improper_lock .
lock_read
Získá zámek čtenář-zapisovač jako čtenář. Pokud existují autoři, aktivní čtenáři musí počkat, až se dokončí. Čtenář jednoduše zaregistruje zájem o zámek a čeká, až ho autoři uvolní.
void lock_read();
Poznámky
Často je bezpečnější využívat konstruktor scoped_lock_read k získání a uvolnění reader_writer_lock
objektu jako čtenáře bezpečným způsobem.
Pokud na zámek čekají zapisovače, čtečka počká, až všichni zapisovači na řádku získali a uvolnili zámek. Tento zámek je zkreslený vůči autorům a může hladovět čtenáře v nepřetržitém zatížení spisovatelů.
reader_writer_lock
Vytvoří nový reader_writer_lock
objekt.
reader_writer_lock();
~reader_writer_lock
reader_writer_lock
Zničí objekt.
~reader_writer_lock();
Poznámky
Očekává se, že zámek se už při spuštění destruktoru neudrží. Povolení zámku pro zápis čtenáře destrukci zámkem stále uchovává výsledky nedefinovaného chování.
reader_writer_lock::scoped_lock – třída
Výjimkou je bezpečný obálka RAII, která se dá použít k získání reader_writer_lock
uzamčených objektů jako zapisovače.
class scoped_lock;
scoped_lock::scoped_lock
scoped_lock
Vytvoří objekt a získá reader_writer_lock
objekt předaný v parametru _Reader_writer_lock
jako zapisovač. Pokud zámek drží jiné vlákno, toto volání zablokuje.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Parametry
_Reader_writer_lock
Objekt reader_writer_lock
, který se má získat jako zapisovač.
scoped_lock::~scoped_lock
reader_writer_lock
Zničí objekt a uvolní zámek zadaný v jeho konstruktoru.
~scoped_lock();
reader_writer_lock::scoped_lock_read – třída
Výjimkou je bezpečný obálka RAII, která se dá použít k získání reader_writer_lock
uzamčených objektů jako čtenáře.
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
scoped_lock_read
Vytvoří objekt a získá reader_writer_lock
objekt předaný v parametru _Reader_writer_lock
jako čtenář. Pokud zámek uchovává jiné vlákno jako zapisovač nebo existují čekající zapisovače, bude toto volání blokovat.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Parametry
_Reader_writer_lock
Objekt reader_writer_lock
, který chcete získat jako čtenář.
reader_writer_lock::scoped_lock_read::~scoped_lock_read Destruktor
scoped_lock_read
Zničí objekt a uvolní zámek zadaný v jeho konstruktoru.
~scoped_lock_read();
try_lock
Pokusí se získat zámek pro čtení a zapisovač jako zapisovač bez blokování.
Syntaxe
bool try_lock();
Návratová hodnota
Pokud byl zámek získán, hodnota true
; jinak hodnota false
.
try_lock_read
Pokusí se získat zámek pro čtení a zapisovač jako čtenář bez blokování.
bool try_lock_read();
Návratová hodnota
Pokud byl zámek získán, hodnota true
; jinak hodnota false
.
odemknout
Odemkne zámek pro čtení a zapisovač na základě toho, kdo ho zamkl, čtečku nebo zapisovač.
void unlock();
Poznámky
Pokud na zámek čekají zapisovače, uvolnění zámku vždy přejde k dalšímu zapisovači v pořadí FIFO. Tento zámek je zkreslený vůči autorům a může hladovět čtenáře v nepřetržitém zatížení spisovatelů.