Sdílet prostřednictvím


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ů.

Viz také

concurrency – obor názvů
critical_section – třída