IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.

Koupit tento kurz

Koupit všechny aktuálně dostupné lekce s funkcí odevzdávání úloh za pouhých 525 Kč
Aktuální stav konta 0 Kč
Koupí tohoto balíčku získáš přístup ke všem 23 článkům (23 lekcí) tohoto kurzu.

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