Typowe problemy synchronizacji procesów
Transkrypt
Typowe problemy synchronizacji procesów
Semafory Semafor jest zmienną całkowitą, na której stowarzyszone operacje: • czekaj (wait, P) • sygnalizuj (signal, V) wykonywane są w sposób niepodzielny. Zmiennej semaforowej nadaje się początkowo pewną wartość ( w szczególności 1) Realizacja operacji P(sem) czekaj aż wartość sem > 0 sem := sem – 1; Realizacja operacji V(sem) sem := sem + 1; Jeśli wartość początkowa semafora jest 1 to mamy do czynienia z tzw. semaforem binarnym (zwyczajowo operacje na nim oznaczamy PB, VB) Semafor binarny rozwiązuje problem sekcji krytycznej. sem := 1; . . . PB(sem); wykonaj sekcję krytyczną; VB(sem); Typowe problemy synchronizacji procesów Problemu producenta-konsumenta Przypadek nieograniczonego bufora: s – semafor binarny chroniący sekcji krytycznej sk – semafor konsumenta, określa ilość elementów w buforze i zawiesza procesy konsumenta w sytuacji pustego bufora s = 1; sk = 0 Producent while true do produkuj; PB(s); dodaj do bufora; V(sk) VB(sk); Konsument while true do P(sk); PB(s) odczytaj z bufora; VB(s); konsumuj; Przypadek ograniczonego bufora: sp – semafor producenta, określa ilość wolnych pozycji w buforze i zawiesza procesy producenta w sytuacji pełnego bufora sp := n; Producent while true do produkuj; P(sp); PB(s); dodaj do bufora; V(sk) VB(sk); Konsument while true do P(sk); PB(s) odczytaj z bufora; V(sp); VB(s); konsumuj;