Třída reader_writer_lock

Zámek čtení-zápis založený na frontě s preferencí pro zapisovače a pouze místní točení. Zámek poskytuje přístup autorům v režimu první dovnitř - první ven (FIFO) a při nepřetržitém zatížení zapisovateli omezuje přístup pro čtenáře.

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 Bezpečná s ohledem na výjimky RAII obálka, která může být použita k získání reader_writer_lock zámku objektů v roli čtenáře.

Veřejné konstruktory

Název Popis
reader_writer_lock (zámek pro čtení a zápis) Vytvoří nový reader_writer_lock objekt.
~reader_writer_lock Destruktor reader_writer_lock Zničí objekt.

Veřejné metody

Název Popis
zámek Získá zámek pro čtení a zápis pro funkci zápisu.
lock_read Získá zámek pro čtení-zápis jako čtenář. Pokud existují autoři, aktivní čtenáři musí počkat, až budou hotovi. Čtenář jednoduše zaregistruje zájem o zámek a čeká, až ho autoři uvolní.
try_lock Pokusí se získat zámek čtení-zápis 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 zápis na základě toho, kdo ho zamkl, čtenář nebo zapisovatel.

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

uzamknout

Získá zámek čtenářů a zapisovačů jako spisovatel.

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 zapisovatelé úspěšně nezískají a neuvolní zámek. Tento zámek je zkreslený ve prospěch zapisovačů a může způsobit hladovění čtenářů při nepřetržitém zatížení zapisovači.

Zapisovače jsou zřetězeni tak, aby zapisovač, který opouští zámek, uvolnil dalšího zapisovače na řadě.

Pokud je zámek již držen v kontextu volání, vyvolá se výjimka improper_lock.

lock_read

Získá zámek pro čtení-zápis jako čtenář. Pokud existují autoři, aktivní čtenáři musí počkat, až budou hotovi. Č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 konstrukci scoped_lock_read k získání a uvolnění reader_writer_lock objektu jako pro čtení bezpečně.

Pokud na zámek čekají zapisovači, čtenář počká, až všichni zapisovači čekající ve frontě získají 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ů.

zámek čtenář/zapisovatel

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í destrukce zámku pro čtení a zápis s držením zámku způsobí nedefinované 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

Vytvoří scoped_lock objekt a převezme 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

Zničí objekt reader_writer_lock a uvolní zámek zadaný v jeho konstruktoru.

~scoped_lock();

reader_writer_lock::scoped_lock_read – třída

Bezpečná s ohledem na výjimky RAII obálka, která může být použita k získání reader_writer_lock zámku objektů v roli čtenáře.

class scoped_lock_read;

scoped_lock_read::scoped_lock_read

Vytvoří objekt scoped_lock_read a jako čtenář získá objekt reader_writer_lock, který je předán jako parametr _Reader_writer_lock. 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

zámek čtenář-zapisovatel
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 čtení-zápis jako zapisovač bez blokování.

Syntaxe

bool try_lock();

Návratová hodnota

Pokud byl zámek získán, hodnota true; jinak hodnota false.

pokus_op_zamknout_čtení

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 zápis na základě toho, kdo ho zamkl, čtenář nebo zapisovatel.

void unlock();

Poznámky

Pokud na zámek čekají zapisovači, jeho uvolnění vždy přejde k dalšímu zapisovači v pořadí FIFO. Tento zámek je zkreslený ve prospěch zapisovačů a může způsobit hladovění čtenářů při nepřetržitém zatížení zapisovači.

Viz také

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