Synchronizační datové struktury
Souběžnost Runtime poskytuje několik datových struktur, které umožňují synchronizovat přístup ke sdíleným datům z více podprocesů.Tyto datové struktury jsou užitečné při sdílení dat, který upravit zřídka.Objekt synchronizace, například kritická sekce způsobuje další podprocesy čekat, až je dostupný sdílený prostředek.Proto pokud synchronizovat přístup k datům, která se často používá takový objekt, můžete ztratit škálovatelnosti aplikace.Knihovna PPL (Parallel Patterns Library) Poskytuje concurrency::combinable třídy, která umožňuje sdílení zdrojů mezi několika podprocesů nebo úkoly bez nutnosti synchronizace.Další informace o combinable třídy naleznete v tématu Paralelní kontejnery a objekty.
Oddíly
Toto téma popisuje následující typy bloku asynchronní zprávu podrobně:
critical_section
reader_writer_lock
scoped_lock a scoped_lock_read
Událost
critical_section
Concurrency::critical_section třída představuje vzájemné spolupráce vyloučení objekt, který dává jiným úlohám namísto jejich preempting.Kritické sekce jsou užitečné, pokud více podprocesů vyžaduje výhradní přístup pro zápis a ke sdíleným datům.
critical_section Je třída vícenásobně přístupné.Concurrency::critical_section::lock metoda výjimku typu concurrency::improper_lock Pokud je volána podprocesem vlastnící zámku.
Metody a funkce
Následující tabulka zobrazuje důležité metody, které jsou definovány critical_section třídy.
Metoda |
Description |
---|---|
Získá kritický oddíl.Volajícím bloky kontextu dokud získá zámek. |
|
Se pokusí získat důležité části, ale neblokuje. |
|
Vydává kritický oddíl. |
Top
reader_writer_lock
Concurrency::reader_writer_lock třída poskytuje operace zápisu podprocesu ke sdíleným datům.Čtecí a zapisovací zámky používáte více podprocesů vyžadují souběžný přístup pro čtení ke sdílenému prostředku, ale zřídka zapisovat do tohoto sdíleného prostředku.Tato třída poskytuje přístup pouze jednoho podprocesu zápisu objektu kdykoli.
reader_writer_lock Třídy lze provádět lepší než critical_section třídy, protože critical_section objektu získá výhradní přístup ke sdílenému prostředku, které zabraňuje souběžný přístup pro čtení.
Stejně jako critical_section třídy, reader_writer_lock třída představuje vzájemné spolupráce vyloučení objekt, který dává jiným úlohám namísto jejich preempting.
Kdy podproces, který musí zapsat do sdíleného prostředku získá zámek reader/writer, jiných podprocesů, které musí také přístup k prostředku jsou blokovány, dokud Zapisovatel odemkne.reader_writer_lock Příkladem je třída Zápis předvoleb zámku, který je který odblokuje autoři čekání před ho odblokuje čtenáři čekání na zámek.
Stejně jako critical_section třídy, reader_writer_lock je třída vícenásobně přístupné.Concurrency::reader_writer_lock::lock a concurrency::reader_writer_lock::lock_read vyvoláním metody výjimky typu improper_lock Pokud se nazývají vlastnícího uzamknutí podproces.
[!POZNÁMKA]
Protože reader_writer_lock třídy je vícenásobně přístupné, nelze inovovat na zámek reader/writer uzamčení jen pro čtení nebo omezit uzamčení reader/writer uzamčení jen pro čtení.Provádění těchto operací buď vytváří nespecifikované chování.
Metody a funkce
Následující tabulka zobrazuje důležité metody, které jsou definovány reader_writer_lock třídy.
Metoda |
Description |
---|---|
Získá přístup pro čtení i zápis k zámku. |
|
Se pokusí získat přístup pro čtení i zápis k zámku, ale neblokuje. |
|
Získá přístup jen pro čtení k zámku. |
|
Se pokusí získat přístup jen pro čtení k zámku, ale neblokuje. |
|
Odemkne. |
Top
scoped_lock a scoped_lock_read
critical_section a reader_writer_lock třídy poskytují vnořené pomocné třídy, které zjednodušuje způsob práce s objekty vzájemné vyloučení.Tyto pomocné třídy jsou známé jako rozsahem zámky.
critical_section Třída obsahuje concurrency::critical_section::scoped_lock třídy.Konstruktor získá přístup zadané critical_section objektu; vydává se objekt přístup k objektu.reader_writer_lock Třída obsahuje concurrency::reader_writer_lock::scoped_lock třídy, která se podobá critical_section::scoped_lock, s výjimkou, že spravuje přístup pro zápis stanoveno na reader_writer_lock objektu.reader_writer_lock Třída obsahuje také concurrency::reader_writer_lock::scoped_lock_read třídy.Tato třída spravuje přístup ke čtení stanoveno pro reader_writer_lock objektu.
Zámky Scoped poskytují několik výhod při práci s critical_section a reader_writer_lock objekty ručně.Obvykle přidělit scoped zámku v zásobníku.Zámek scoped přístup k objektu jeho vzájemné vyloučení automaticky po uvolní zničeno; proto můžete odemknout ručně základní objekt.To je užitečné při funkce obsahuje více return příkazy.Zámky Scoped také můžete zapsat kód výjimky bezpečné.Když throw zásobník unwind způsobuje prohlášení, se nazývá destruktoru pro všechny aktivní zámku oboru a proto vždy správně uvolnění objektu vzájemné vyloučení.
[!POZNÁMKA]
Při použití critical_section::scoped_lock, reader_writer_lock::scoped_lock, a reader_writer_lock::scoped_lock_read tříd, ručně uvolnit přístup k základní objekt vzájemné vyloučení.Tento modul runtime umístit v neplatném stavu.
Událost
Concurrency::event třída představuje objekt synchronizace stavem může být signalizováno následným tichem nebo bez signalizováno následným tichem.Synchronizace objektů, například kritické sekce, jejichž účelem je chránit přístup ke sdíleným datům, na rozdíl od událostí synchronizovat toku spouštění.
event Třídy je užitečné, když jeden úkol dokončil práce na jiném úkolu.Například jeden úkol může být signál jiného úkolu se má číst data z připojení k síti nebo ze souboru.
Metody a funkce
Následující tabulka uvádí několik důležitých metody, které jsou definovány event třídy.
Metoda |
Description |
---|---|
Čeká na událost stane signalizováno následným tichem. |
|
Nastaví událost signalizovaném stavu. |
|
Nastaví stav bez signalizováno následným tichem události. |
|
Čeká více událostí, které se stanou signalizováno následným tichem. |
Příklad
Příklad, který ukazuje, jak použít event třídy naleznete v tématu Porovnávání synchronizačních datových struktur s rozhraním API systému Windows.
Top
Související oddíly
Porovnávání synchronizačních datových struktur s rozhraním API systému Windows
Porovnává chování synchronizace datových struktur těm, které poskytuje rozhraní API systému Windows.Concurrency Runtime
Popisuje souběžnosti Runtime, která zjednodušuje paralelní programování a obsahuje odkazy na Příbuzná témata.