16. diel - Bariéry a závory v C ++

V predchádzajúcom kvíze, Kvíz - Deadlock, livelock a Coffmanove podmienky v C++, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.

Dnes si opäť rozšírime obzory a pozrieme sa na bariéry a závory, ktoré nám umožňujú paralelizovat naše algoritmy.

Bariéry

Bariéra (anglicky barrier) je štruktúra umožňujúca synchronizovať beh vlákien.

Motivácia

Na začiatku kurzu sme niekoľkokrát zdôrazňovali, že je potrebné nad programom myslieť paralelne ako sekvenčne. Operačný systém sa môže rozhodnúť nejaké vlákno pozastaviť, spustiť s oneskorením a podobne. Vo výsledku sa môže stať, že vlákno začínajúci volaním sleep() po 1s môže byť spustené skôr, než vlákno bez uspania. Práve bariéry tento problém rieši.

Funkčnosť

Pri vytvorení bariéry odovzdáme počet vlákien, ktoré majú na bariére čakať. Každé vlákno, ktoré sa k bariére dostane, sa zablokuje. Až až je počet čakajúcich vlákien rovný odovzdanej hodnote, bariéra vlákna odblokuje a dovolí im pokračovať (niekedy sa môžeme stretnúť s pojmom "pretrhnutiu bariéry"). Potom sa bariéra opäť aktivuje a znovu čaká na daný počet vlákien.

Svojím spôsobom teda bariéra zaisťuje, že sa všetky vlákna (resp. Ich daný počet) stretnú na rovnakom mieste v programe alebo minimálne na rovnakej synchronizačný entite.

Závora

Závora (anglicky latch) je zjednodušenie bariéry.

Funkčnosť

Fungovanie je totožné s bariérou, len s tým rozdielom, že závora


 

...koniec náhľadu článku...
Pokračuj ďalej

Vedomosti v hodnote stoviek tisíc získaš za pár eur

Došiel si až sem a to je super! Veríme, že ti prvé lekcie ukázali niečo nového a užitočného.
Chceš v kurze pokračovať? Prejdi do prémiovej sekcie.

Obsah článku spadá pod licenciu Premium, kúpou článku súhlasíš s Prevádzkovými podmienkami.

Čo od nás v ďalších lekciách dostaneš?
  • Prístup k jednotlivým lekciám podľa spôsobu obstarania.
  • Kvalitné znalosti v oblasti IT.
  • Zručnosti, ktoré ti pomôžu získať vysnívanú a dobre platenú prácu.

Popis článku

Požadovaný článok má nasledujúci obsah:

V C ++ tutoriálu si predstavíme nové synchronizačné entity - bariéry a závory, pomocou ktorých môžeme vlákna zosynchronizovať na konkrétnom mieste.
Článok pre vás napísal Patrik Valkovič
Avatar
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity