3. tétel - Szinkronizáció II.

Mutassa be a szemafor és a monitor működését! Milyen esetekben célszerű a használatuk?

Szemafor

A szemafor két atomi műveletből (P() és V()), valamint egy várósorból és egy S változóból álló szinkronizációs szerkezet. A kritikus szakasz P() és V() művelet között helyezkedik el. S kezdőértéke kölcsönös kizárás esetén 1, mely értékét a belépni szándékozó szálak csökkenthetik.

Szemafor

Az első P() csökkenteni próbálja S értékét, ezzel a többi szál várakoztatásáért felel. Ha az S változó értéke negatív lett, akkor van már szál a kritikus szakaszban, esetleg már több szál is várakozik, tehát a szál bekerül a Q várósorba. Egyébként, ha S értéke nem kisebb mint 0, akkor a szemaforban még van férőhely, tehát a szál beléphet a kritikus szakaszba.

A V() növeli S értékét. Ha az 0, vagy annál kisebb, van várakozó szál a sorban. Ekkor értesíti a legrégebbóta váró szálat, hogy beléphet a kritikus szakaszba.

Szemafor P() művelete

Szemafor V() művelete

Bináris szemafor esetén S kezdőértéke 1, ekkor, ha S értéke 0, akkor biztosan az adott szál csökkentette a S értékét, tehát üres a kritikus szakasz.

Ha a várósor FIFO, akkor erős szemafor, fair kiszolgálással.

Szemafor használata akkor célszerű, ha a kritikus szakaszban egyszerre több szál is tartózkodhat, de ezeknek a száma felülről korlátos kell legyen.

Monitor

A monitor egy szinkronizációs szerkezet, ami egy lockon (L) és egy feltételváltozón (CV) alapul. Ezzel az eszközzel a szálak blokkolását egy feltételhez tudjuk kötni, tehát olyan kölcsönös kizárást valósít meg, ahol feltételhez kötött a belépés a kritikus szakaszba.

A CV feltételváltozó (Condition Variable) egy olyan sor struktúrájú szerkezet, amelyre a szálak feliratkozhatnak, ha a feltétel kiértékelése nem megfelelő számukra a továbblépésre. A feliratkozott szál értesítésig blokkolódik.

Három atomi művelete van, ezek a wait, a signal és a broadcast.

A wait művelet a feltételváltozó blokkoló viselkedését valósítja meg. kiértékeli a feltételváltozót (CV), és ha szükséges, akkor a szál feliratkozik a CV értesítéseire, blokkolódik és elengedi a lockot. (A feltétel kiértékelése, és a feltételváltozóra való feliratkozás maga egy lockkal őrzött kritikus szakaszban történik).

A signal és a broadcast a blokkolt szálak értesítésére szolgálnak a feltételváltozón keresztül, előbbi csak egyet (a legrégebb óta váraakozót), az utóbbi az összeset felébreszti a blokkolásból.

Monitor