Obraz (22)

Obraz (22)



104

Funkcja stuży do sterowania semaforami i ma następujące parametry:

•    semid - numer zbioru semaforów,

•    sem_num - numer semafora w zbiorze (numeracja zaczyna sie od zera),

•    command - polecenie, jakie ma być wykonane na zbiorze semaforów,

•    ctl_arg - parametry polecenia.

Funkcja semctl należy do trzech kategorii standardowych funkcji EPC:

Tabela 9.2

Kategorie standardowych funkcji IPC

Standardowe funkcje IPC (struktura semió_ds zdefiniowana jest w <sys/sem.h>)

IPC_STAT

umieszcza informację o stanie w ctl_arg. stat

IPC_SET

ustawia informację o prawach własności i dostępu z ctl_arg. stat

IPC_RtyiID

usuwa zestaw semaforów z systemu

Operacje na pojedynczym semaforze - wartości zwracane przez semctl (dotyczą semafora sem_num)

GETVAT

zwraca wartość semafora, czyli semvai

SETVAL

ustawia wartość semafora w ctl_arg. val

GETPID

zwraca wartość sempia

GETNCNT

zwraca semncnt

GETZCNT

zwraca semzcnt

Operacje na wszystkich semaforach

GSTALIi

umieszcza wszystkie semvals w ctl_arg. array

SETALL

ustawia wszystkie semvals zgodnie z ctl_arg. array

Alokowanie i inicjowanie semaforów to dwie oddzielne operacje. Aby zainicjować semafor, musimy użyć funkcji semctl. Każdy semafor ma nieujemną wartość i umożliwia wykonanie operacji opuszczenia lub podniesienia semafora. Operacje te wykonuje wywołanie systemowe semop.

int semop(int semid, struct sembuf *op_array, size_t num_ops);


•    Parametr semid musi być ważnym identyfikatorem semafora (wynik semget).

•    Parametr op_array to tablica struktur sembuf (struktura sembuf jest zdefiniowana w <sys/sem.h>).

® Parametr num_ops jest liczbą struktur sembuf w tablicy. Każda struktura sembuf zawiera specyfikację operacji do wykonania na semaforze.

Wywołanie semop wykonuje się niepodzielnie na zestawach semaforów. Struktura sembuf zawiera następujące składowe:

sem_op>0

operacja V — powoduje zwiększenie wartości semafora o sem_op; jeśli jakiś proces czeka na nową wartość semafora, zostanie obudzony

sem_op<0

operacja P - wstrzymuje proces lub powoduje zmniejszenie wartości semafora o sem_op

sem_op=0

operacja czeka do chwili, gdy wartość semafora stanie się zerem

struct sembuf {

unsigned short sem_num;/* indeks semafora w zestawie */

short sem_op; /* określa co zrobić */ short sem_flag;

}


Funkcja semop podejmuje próbę wykonania wszystkich wskazywanych operacji. Gdy chociaż jedna z operacji nie będzie możliwa do wykonania, nastąpi blokada procesu lub błąd wykonania funkcji semop, zależnie od ustawienia flagi. Aby operacja nie blokowała procesu, należy podać flagę IPC_NOWAIT, wtedy, jeżeli operacja miałaby blokować, wywołanie semop nie powiedzie się. Jeśli podamy flagę SEM_UNDO, Linux automatycznie cofnie operacje blokujące na semaforze przy zakończeniu procesu.


Wyszukiwarka

Podobne podstrony:
Obraz5 (22) " ■*p nawet w trójzasadowe. Pierwsze mleko matki (siara) ma kwasowość powyżej
Obraz5 (22) " ■*p nawet w trójzasadowe. Pierwsze mleko matki (siara) ma kwasowość powyżej
IMG60 (5) Podstawy rozdrabniania - 8 Zastosowany do mielenia młyn charakteryzują następujące parame
arkusz eI + odpowiedzi0001 ARKUSZ € I • Informacja do zadań 1 i 2 Pierwiastek L ma następującą konfi
Obraz2 (22) Trening autogenny Schultz’a Generalnym warunkiem dojścia do zdolności .sterowania sobą
Systemy wbudowane Laboratorium Wybrane funkcje logiczne Wprowadzenie Sterowniki PLC - Wprowadzenie d
80746 obraz3 (22) ze skrzynki, spełniłem swoje zadanie, złożyłem do koszyka i z koszyka do skrzynki

więcej podobnych podstron