Hledáme fulltime PHP programátora do ITnetwork týmu - 100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 50% výuky zdarma!

Lekce 13 - Podmíněné proměnné v C++

Minulá lekce, Coffmanovy podmínky v C++, byla spíše teoretická a bavili jsme se o Coffmanových podmínkách. Ty svým způsobem určují, kdy může v aplikaci vzniknout deadlock a ukázali jsme si, že porušení libovolné z těchto podmínek zabrání deadlocku. Na druhou stranu jsme si řekli, že vyvarovat se těmto podmínkám není úplně snadné a ve výsledku může být aplikace méně efektivní nebo zavést další problémy jako livelock.

V této lekci přidáme poslední nástroj do našeho vícevláknového arzenálu - podmíněné proměnné. A samozřejmě si je vyzkoušíme na praktickém příkladu, kde pro nás budou mít přidanou hodnotu.

Podmíněné proměnné

Princip podmíněných proměnných (nebo se jim může říkat signály) je velice jednoduchý. Na jedné straně (příjemce signálu) je vlákno, které čeká na podmíněnou proměnnou. Jiné vlákno (odesílatel signálu) poté může podmíněnou proměnnou signalizovat (anglicky notifikovat) a tím říci čekajícímu vláknu, že akce byla splněna, má přístupná data a podobně. Pojďme se rovnou podívat na potřebné třídy.

Třída std::conditional_variable

Nejdůležitější třídou je std::conditional_variable.

Metody čekající na signál

Základní verzí je metoda wait(), která čeká na signál neomezeně dlouho. Již jsme si v kurzu ukazovali, že uspat celé vlákno po neomezený čas není nejlepší nápad, protože při chybě v logice programu vlákno nebude nikdy probuzeno a aplikace "zamrzne".

Vlákno je lepší uzamknout pouze na určitou dobu (například sekunda nebo pět, v závislosti na


 

...konec náhledu článku...
Pokračuj dál

Znalosti v hodnotě stovek tisíc získáš za pár korun

Došel jsi až sem a to je super! Věříme, že ti první lekce ukázaly něco nového a užitečného.
Chceš v kurzu pokračovat? Přejdi do prémiové sekce.

Omezená nabídka: Nauč se vše a ušetři

Koupit lekce a funkce postupně a po jednom 180 bodů
Koupit všechny aktuálně dostupné lekce s funkcí odevzdávání úloh za exkluzivní cenu 153 bodů (382 Kč)
Na svém účtu máš aktuálně 0 bodů
Koupí tohoto výhodného balíčku získáš přístup ke všem 20 lekcím s kontrolou a certifikací a ještě navíc ušetříš 68 Kč. Nabídka je omezená pouze pro první lekce z kurzu a obsahuje exkluzivní slevu 15%.
153 bodů získáš za přidání svého článku na síť nebo odpovídá 449 Kč 382 Kč

Pozor, pokud si koupíš pouze tuto lekci, ztratíš nárok na speciální slevu 15% na balíček všech lekcí.

Koupit jen lekci 10 bodů
Na svém účtu máš aktuálně 0 bodů
10 bodů získáš za přidání svého článku na síť nebo odpovídá 25 Kč

Před koupí tohoto článku je třeba koupit předchozí díl

Obsah článku spadá pod licenci Premium, koupí článku souhlasíš se smluvními podmínkami.

Co od nás v dalších lekcích dostaneš?
  • Neomezený a trvalý přístup k jednotlivým lekcím.
  • Kvalitní znalosti v oblasti IT.
  • Dovednosti, které ti pomohou získat vysněnou a dobře placenou práci.

Popis článku

Požadovaný článek má následující obsah:

Do arzenálu pro vícevláknové programování v C++ si přidáme podmíněné proměnné a opravíme architekturu producent-konzument.

Body získáš, když podpoříš naši síť. To můžeš udělat buď zasláním symbolické částky na podporu provozu nebo přidáním obsahu na síť.

Článek pro vás napsal Patrik Valkovič
Avatar
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity (3)