Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.