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.

zapoznaniu się z mechanizmem pamięci dzielonej w Unixie (którego tu, ze względu na brakmiejsca, nie opisujemy), można łatwo zmodyfikować przedstawione rozwiązania.8.2 Przykłady8.2.1 Wzajemne wykluczanieRozwiązanie problemu wzajemnego wykluczania jest takie samo, jak za pomocąstandardowych semaforów (por. 3.2.1). Podamy tutaj jedynie przykładowy kod funkcji w językuC, które mogą być użyte do wzajemnego wykluczania.Kod składa się z czterech funkcji, zgrupowanych w pliku semafor.c, który może byćoddzielnie kompilowany i łączony z innymi plikami wynikowymi. Plik zawiera następującefunkcje: deklaracja, inicjacja, P oraz V. Działają one na strukturach danych, lokalnych dla tegopliku (klasa pamięci static).Każdy proces, który chce korzystać z semafora, musi podczas inicjacji wywołać funkcjędeklaracja. W funkcji tej proces uzyskuje identyfikator zbioru semaforów. Jeżeli zbiór jeszczenie istnieje, to jest tworzony. Jeden z procesów musi wywołać funkcję inicjacjaz parametrem 1.Jej wywołanie musi nastąpić po wywołaniu funkcji deklaracja przez ten proces oraz przedwywołaniami funkcji P i V przez jakikolwiek proces. 0 tym, który z procesów powinien inicjowaćsemafor pisaliśmy w p. 8.1.5.#include #include #include static int sera;static struct sembuf buf[l];void deklaracja (void){sem = semget (1, 1, IPC_CREAT | 0666);buf[0].sem_num = 0;buf[0].sem_flg = 0;}void inicjacja (int i){semctl (sem, 0, SETVAL, i);}void P (void){buf[0].sem_op = -1;semop (sem, buf, 1);}void V (void){buf[0].sem_op = 1;semop (sem, buf, 1);}Przedstawiony kod jest mało elastyczny. Mamy tu do czynienia z jednym tylkosemaforem. Rozszerzenie dla wielu semaforów jest jednak bardzo proste.211

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

Saved successfully!

Ooh no, something went wrong!