2. tétel - Szinkronizáció I.
Ismertesse Dekker és Peterson algoritmusát kölcsönös kizárásra! Mire szolgál és milyen elven működik Lamport Bakery algoritmusa?
A kód azon részét, ahol a közös, függést okozó változók vannak, kritikus szakasznak nevezzük. Cél: a kritikus szakaszban egyszerre csak egy szál legyen.
Dekker algoritmusa
- Két szál verseng, hogy a kritikus szakaszba léphessen
- Az algoritmus a szál indexétől függően eltérően viselkedik.
flag[i]true értéket vesz fel, ha aziindexű szál be kíván lépni a kritikus szakaszba- Ha a szálak egyszerre kezdik meg a belépést, akkor a
turnváltozó értéke jelzi, hogy melyik szál következik

- A
0indexű szál aflag[0]értékét igazra állítja, és megvizsgálja aflag[1]értékét. - Ha hamis, akkor a szál belép a kritikus szakaszba. Kilépéskor pedig visszaállítja hamisra a saját flagjét.
- A gyakorlatban a
turndönt a belépésről azokban az esetekben, amikor a belépést a szálak esetleg egyszerre kezdik meg: aturnértéke jelzi, hogy mely szál következik; a másik szál várakozik. - Ha a
turnazt jelzi, hogy a másik szál van soron, akkor a szál leveszi a flagjét, és várakozik aturnmegváltozására. Fontos észrevenni, hogy a flag hamisra állítása fontos lépés, hisz a másik szál esetlegesen ezt vizsgálja a belépési protokolljában, így nem léphet be amíg aztrueértékű.
Előfordulhat olyan eset, hogy:
T₀a kritikus szakaszban van, T1 várakozikT₀a kilépés után egyből belépést kezdeményez, T1 nem tud időben kijönni a várakozó állapotból. Ekkor sérül a fair kiszolgálás.
Peterson algoritmusa
- A
turnváltozó a belépési feltétel részeként szerepel - A
flagátállítását követően aturna másik szálra fog mutatni, hogy az következik a sorban. - Ebben az eseten megfigyelhető a fair
viselkedés, vagyis amelyik szál hamarabb kezdi meg a belépést, garantáltan az fog előbb belépni a kritikus
szakaszba. Ekkor ugyanis a
turnérvényes értéke az utolsó beállított érték lesz.

Lamport algoritmusa
Lamport Bakery algoritmusa több szál kölcsönös kizárását hivatott megoldani, amely a pékségekben használt várósoron alapul.
- Minden szál egy sorszámot kap, és mindig a legkisebb sorszámú kerül kiszolgálásra, addig a többi várakozik.
- Az algoritmusban előre ismert a szálak száma.
- Kezdetben minden szám egy sorszámot kap, eggyel nagyobbat az utolsónál.
- Van egy
choosingtömb.choosing[i]igaz, ha aziindexű szál még nem kapott sorszámot. - Amíg a choosing tömb bármelyik eleme igaz, a szálak várakoznak,tehát megvárják, hogy minden szál sorszámhoz jusson.
- A várakozás megvalósításában, ha egy
Bszál már a belépési protokollban vagy a kritikus szakaszban tartózkodik, és a sorszáma kisebb, vagy egyező és az indexe kisebb, mintAszálnak, akkorAszál várakozni kényszerül.