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.

Funkcje na semaforachNadanie semaforowi wartości, odczytanie wartości semafora, odczytanie liczbyprocesów czekających na jego podniesienie i liczby procesów czekających na jegoopuszczenie uzyskuje się w wyniku wywołania funkcjiint semctl (int semid, int semnum, int cmd, int val);Znaczenie parametrów jest następujące: semid jest identyfikatorem zbioru semaforów,semnum — numerem semafora w zbiorze, cmd — kodem operacji wykonywanej na tymsemaforze, val — parametrem operacji (uwaga: w przypadku operacji, których tu nieopisujemy, znaczenie tego parametru jest bardziej skomplikowane). Parametr cmd możeprzyjmować następujące wartości: SETVAL — nadanie wartości semaforowi, GETVAL —odczytanie wartości semafora, GETNCNT — odczytanie liczby procesów czekających napodniesienie semafora, GETZCNT — odczytanie liczby procesów czekających naopuszczenie semafora. Parametr val ma znaczenie tylko podczas nadawania wartościsemaforowi i zawiera tę wartość. W przypadku wykonywania operacji GETVAL, GETNCNT iGETZCNT wartością funkcji semctl są odpowiednie liczby (nieujemne). Jeżeli operacja niemoże być wykonana, to wartością funkcji jest —1. Tak jest na przykład wtedy, gdy usiłujemynadać semaforowi wartość ujemną lub większą od górnego ograniczenia.Operacje semaforoweOperacje P, V, Z, nP i nZ wykonuje się wywołując funkcję:int semop (int semid, struct sembuf *sops, unsigned nsops);Jej parametrami są: semid — identyfikator zbioru semaforów; sops — wskaźnik dotablicy struktur o następującej deklaracji:struct sembuf {int sem_num;int sem_op;int sem_flg;};Parametr nsops to liczba elementów tablicy, czyli liczba semaforów, na których ma byćwykonana operacja. Znaczenie pól struktury sembuf jest następujące: sem_num — numersemafora, na którym ma być wykonana operacja, sem_op — kod operacji, sem_flg —znacznik informujący o sposobie wykonania operacji. Operacje są kodowane w następującysposób: jeśli wartość pola sem_op jest dodatnia, to ma wykonać się operacja V(sem_num,sem_op), jeśli wartość pola sem_op jest xijemna, to ma wykonać się operacja P(sem_num, -sem_op), natomiast jeśli wartość pola sem_op wynosi 0, to ma wykonać się operacjaZ(sem_num). Znacznik sem_flg może być równy stałej IPC_NOWAIT i wtedy operacja jestnieblokująca albo może być równy 0 i wtedy operacja jest blokująca.Wartością funkcji semop jest 0, gdy operacja została wykonana, —1 w przeciwnymrazie.Powody niewykonania operacji semaforowej mogą być różnorakie — dla nasinteresujące są dwa. Po pierwsze, przynajmniej jedna z operacji składowych operacjiwektorowej jest nieblokująca, a operacji wektorowej nie można wykonać natychmiast. Po209

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

Saved successfully!

Ooh no, something went wrong!