NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

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

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 všechny aktuálně dostupné lekce s funkcí odevzdávání úloh za exkluzivní cenu 315 Kč
Aktuální stav konta 0 Kč
Koupí tohoto výhodného balíčku získáš přístup ke všem 23 článkům (23 lekcí) tohoto kurzu s kontrolou a certifikací a ještě navíc ušetříš 211 Kč. Nabídka je časově omezená a platí pro všechny lekce v kurzu. Nakup teď a získej limitovanou 40% slevu.

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.

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

Č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