12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Do synchronizacji procesów w rozwiązaniach niektórych klasycznych problemów, takichjak wzajemne wykluczanie, problem producenta i konsumenta czy problem pięciu filozofów,wystarczą same semafory. Jest jednak wiele problemów, w których do podjęcia właściwejdecyzji jest potrzebna wartość semafora lub informacja o liczbie wstrzymanych procesów.Trzeba wówczas oprócz semafora wprowadzić zwykłe, pomocnicze zmienne całkowite, wktórych będą pamiętane odpowiednie wartości. Programista sam musi jednak zadbać o to, abyzmienne te były modyfikowane przy każdej operacji P lub V. Wszelkie operacje na tychzmiennych muszą być sekcją krytyczną procesu, co oznacza, że do ich ochrony trzeba użyćjeszcze jednego semafora. Program współbieżny staje się przez to bardziej skomplikowany itraci na przejrzystości.W sytemie Unix jest możliwość zarówno odczytywania wartości semafora, jak istwierdzania, czy są procesy czekające na jego podniesienie. Wszystkie zadania w rozdz. 8, wktórym omawiamy semafory unixowe, rozwiązano za pomocą samych semaforów, bez użyciazmiennych pomocniczych do synchronizacji procesów.3.2 Przykłady3.2.1 Wzajemne wykluczanieSemafor wymyślono po to, aby w prosty sposób można było za jego pomocązrealizować wzajemne wykluczanie. Do wzajemnego wykluczania dowolnej liczby procesówwystarczy jeden semafor binarny. Rozwiązanie problemu wzajemnego wykluczania wyglądanastępująco:const N = ?; {liczba procesów}var S: binary semaphore := 1;process P(i:l..N);beginwhile true do beginwlasne_sprawy;PB(S);sekcja_krytyczna;VB(S)endend;Ponieważ semafor S ma wartość początkową 1, tylko jeden proces będzie mógłwykonać operację PB(S) bez wstrzymywania, pozostałe będą musiały czekać, aż proces tenwykona operację VB(S).3.2.2 Producenci i konsumenciKilka rozwiązań problemu producenta i konsumenta za pomocą semaforów możnaznaleźć w książce [BenA89]. Tu podamy rozwiązanie dla Inifora N-elementowego, N > 1.Semafor WOLNE będzie podniesiony, jeśli w buforze będą wolne elementy. Semafor PEŁNEbędzie podniesiony wtedy, gdy w buforze będą zapełnione elementy. Aktualne wartości tychsemaforów będą wskazywać na liczby odpowiednio wolnych i zajętych elementów bufora.const N = ?;{rozmiar bufora}37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!