Lekce 13 - Podmíněné proměnné v C++
V minulé lekci, Coffmanovy podmínky v C++, jsem se bavili 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
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.
Koupit tento kurz
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.
- 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.
Kredity 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íť.