12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

}deklaracja ();gethostname(nazwa,80); /* pobranie nazwy komputera */while (1) {/* własne sprawy */callrpc (SEMAFOR, SEM_PROG, SEM_VERS, SEM_P,xdr_wrapstring, &nazwa, xdr_bool, &czeka);if (czeka)P ();/* sekcja krytyczna */callrpc (SEMAFOR, SEM_PROG, SEM_VERS, SEM_V,xdr_void, NULL, xdr_void, NULL);}Oto plik ZAWIADOWCA. c zawierający kod źródłowy procesów obsługujących semaforylokalne:#include #include "services.h"/* funkcje z przykładu 8.2.1 - plik semafor.c */extern void deklaracja (void);extern void inicjacja (int);extern void V (void);char *zwolnij (void);void main (void){deklaracja ();inicjacja (0);registerrpc (ZAW_PROG, ZAW_VERS, ZWOLNIJ,zwolnij, xdr_void, xdr_void);svc_run ();}char *zwolnij (void){V ();return (char *)NULL;}Przekazywanie uprawnieniaJakkolwiek koncepcja przekazywania żetonu uprawniającego proces do wejścia dosekcji krytycznej jest bardzo prosta, to jej realizacja za pomocą zdalnego wywołania procedurjest dosyć złożona. Nie można zastosować tu rozwiązania takiego jak w CSP (przykład 5.2.1),gdyż prowadziłoby ono do blokady. Wynika to ze sposobu realizacji zdalnego wywołaniaprocedur. Gdyby jeden z SEKRETARZy rozpoczął przekazywanie uprawnienia do następnegoSEKRETARZa, ten do jeszcze następnego itd., to ostatni z nich usiłowałby przekazaćuprawnienie temu, który rozpoczął cały proces, ale on byłby właśnie zajęty przekazywaniemuprawnienia.Aby uniknąć blokady, w procesie SEKRETARZ pozostawimy tylko przyjmowanieuprawnienia, natomiast wysyłaniem go będzie zajmował się odrębny proces POSŁANIEC.Lokalne semafory WEJŚCIE i WYJŚCIE służą do synchronizacji procesów PR, SEKRETARZ iPOSŁANIEC. Oto kod tych procesów w notacji abstrakcyjnej:258

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

Saved successfully!

Ooh no, something went wrong!