6. diel - Multithreading v Jave - Semafor
V predchádzajúcej lekcii, Multithreading v Jave - Užitočné komponenty pre paralelizmus , sme si zhrnuli ďalšie možné techniky pre paralelné programovanie. Dnes si ukážeme prvú z pokročilých tried pre paralelné programovanie - semafor.
Kritická sekcia
Než sa pustíme do popisu jednotlivých synchronizačných primitív, vysvetlíme si podrobne, čo to presne kritická sekcia je. V predchádzajúcich lekciách sme sa o nej letmo zmienili, ale nevysvetlili si ju do podrobna. Poďme to napraviť.
Kritická sekcia je miesto, kde dochádza k časovému súbehu, teda je vykonávaný prístup k spoločným dátam.
Naším cieľom je zabezpečiť, aby sa v kritickej sekcii vyskytol iba jeden proces / vlákno.
Každá kritická sekcia sa vzťahuje ku konkrétnym dátam, ku
ktorým sa v nej pristupuje (x
, y
, z
,
s1
, ...). Snažíme sa nezamyká všetko, ale len
konkrétne kritické miesta zdieľaných dát.
Jedno synchronizačný primitívom sme si už predstavili: monitor.
Podpora monitora musí byť implementovaná priamo v programovacom jazyku. V
Jave je monitor prítomný pomocou kľúčového slova
synchronized
. Teraz prejdeme k ďalším primitívom.
Semafor v C
Aby sme pochopili princípy semafore, ukážeme si krátku abstraktné implementáciu v jazyku C. Dijkstra (1962/1963) navrhol primitívom, ktoré zjednodušuje
...koniec náhľadu článku...
Pokračuj ďalej
Minul 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émiové sekcie.
Obmedzená ponuka: Nauč sa všetko a ušetri
Obsah článku spadá pod licenciu Premium, kúpou článku súhlasíš so zmluvnými podmienkami.
- Neobmedzený a trvalý prístup k jednotlivým lekciím.
- 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 tutoriále sa zoznámime s pokročilejšími technikami pre paralelné programovanie v jazyku Java. Predstavíme si semafor.
Kredity získaš, keď podporíš našu sieť. To môžeš urobiť buď zaslaním symbolickej sumy na podporu prevádzky alebo pridaním obsahu na sieť.