Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij podzimní akce 30% výuky zdarma!
Pouze tento týden sleva až 80 % na e-learning týkající se JavaScript

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

Prémiový článek

Prémiový článek

Na itnetwork.cz se nachází největší a nejucelenější česká databáze s výukovými články, jejímž cílem je umožnit kvalitní vzdělání v oblasti IT úplně každému. Měsíčně zobrazíme k milionu článků a sklidíme desítky děkovných emailů, kde nám sdělujete, že jsme vám pomohli k lepšímu zaměstnání nebo vzdělání.

Ačkoli se snažíme držet většinu obsahu úplně zadarmo, udržovat síť v provozu a aktuální stojí obrovské úsilí. Proto je nějaký obsah, jako cvičení nebo odbornější články, přístupný pouze za body. Nebojte, nestojí to skoro nic :)

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.

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

Koupit články a funkce postupně a po jednom 170 bodů
Koupit všechny aktuálně dostupné články v sekci se všemi funkcemi za exkluzivní cenu 145 bodů
Na svém účtu máš aktuálně 0 bodů
Koupí tohoto výhodného balíčku získáš přístup ke všem 19 článkům s kontrolou a certifikací a ještě navíc ušetříš 64 Kč. Nabídka je omezená pouze pro první články z kurzu a obsahuje exkluzivní slevu 15%.
145 bodů získáš za přidání svého článku na síť nebo odpovídá 424 Kč 361 Kč

Pozor, pokud si koupíš pouze tento článek, ztratíš nárok na speciální slevu 15% na balíček všech článků.

Pro přístup k článku potřebuješ 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

Koupí článku k němu získáš neomezený přístup a to napořád. Posuneš své znalosti zas kousek dopředu a zároveň nám pomůžeš udržovat celý projekt při životě a pomáhat vám tak k lepší budoucnosti.

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

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íť.

Dobít body můžeš okamžitě např.:

Kartou SMS Převodem
Kartou SMS Převodem
Č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)