SO-1st-2.3-w12.tresc-1.0-Slajd6
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Implementacja semafora ogólnego na poziomie maszynowym
W implementacji na poziomie maszynowym semafor ogólny jest zmienną całkowitą nieujemną (teoretycznie nieograniczoną od góry), na której wykonywane są operacje P i V . Takie podejście do implementacji wynika zatem bezpośrednio z definicji.
W celu wyeksponowania przepływu sterowania i wskazania instrukcji, które muszą być wykonane niepodzielnie, implementację operacji P można przedstawić następująco:
procedure P(var s : Semaphore)begin próbuj: zablokuj_obsługę_przerwań; if s = 0 then begin odblokuj_obsługę_przerwań; goto próbuj end; else begin s := s – 1; odblokuj_obsługę_przerwań end; end;
Ciąg instrukcji pomiędzy zablokowaniem, a odblokowaniem przerwań wykonywany jest niepodzielnie. Istotne jest zatem niepodzielne sprawdzenie i zmniejszenie wartości zmiennej s (pod warunkiem, że jest większa od 0).
Skok do linii zaetykietowanej jako próbuj oznacza aktywne czekanie.