sem_overview(7) Miscellaneous Information Manual sem_overview(7) NAZWA sem_overview - przeglad semaforow POSIX OPIS Semafory POSIX pozwalaja na synchronizowanie swojego dzialania przez procesy i watki. Semafor jest liczba calkowita, ktorej wartosc nie moze spasc ponizej zera. Na semaforach mozna przeprowadzic dwa dzialania: zwiekszenie wartosci semafora o jeden (sem_post(3)) oraz zmniejszenie wartosci semafora o jeden sem_wait(3)). Jesli wartosc semafora wynosi aktualnie zero, to operacja sem_wait(3) zostanie zablokowana do momentu, gdy wartosc semafora ponownie osiagnie wiecej niz zero. Semafory POSIX wystepuja w dwoch odmianach: semaforow nazwanych i semaforow nienazwanych. Semafory nazwane Semafor nazwany jest identyfikowany nazwa w postaci /jakas-nazwa. Jest to lancuch o wielkosci do NAME_MAX-4 (tj. 251) znakow, zaczynajacy sie poczatkowym ukosnikiem, po ktorym wystepuje jeden lub wiecej znakow niebedacych ukosnikiem i zakonczony znakiem null. Na tym samym semaforze nazwanym moga dzialac dwa procesy, podajac te sama nazwe do sem_open(3). Funkcja sem_open(3) tworzy nowy semafor nazwany lub otwiera istniejacy semafor nazwany. Po otwarciu semafora, mozna na nim dzialac za pomoca sem_post(3) i sem_wait(3). Gdy proces zakonczy uzywanie semafora, moze go zamknac za pomoca sem_close(3). Po zakonczeniu uzywania semafora przez wszystkie procesy, mozna go usunac z systemu za pomoca sem_unlink(3). Semafory nienazwane (semafory dzialajace w pamieci) Semafor nienazwany nie posiada nazwy. Jest natomiast umieszczany w regionie pamieci dzielonym przez wiele watkow (semafor miedzywatkowy) lub procesow (semafor miedzyprocesowy). Semafor miedzywatkowy jest umieszczany w przestrzeni pamieci dzielonej przez watki procesu, np. w zmiennej globalnej. Semafory miedzyprocesowe musza zostac umieszczone w przestrzeni pamieci dzielonej (np. w segmencie pamieci dzielonej Systemu V utworzonej za pomoca shmget(2), lub w obiekcie pamieci dzielonej POSIX zbudowanym za pomoca shm_open(3)). Przed uzyciem, konieczne jest zainicjowanie semafora nienazwanego za pomoca sem_init(3). Nastepnie mozna na nim dzialac operacjami sem_post(3) i sem_wait(3). Gdy semafor nie jest dluzej potrzebny, a przed zwolnieniem pamieci w ktorej istnieje, nalezy go zniszczyc za pomoca sem_destroy(3). Pozostala czesc niniejszego rozdzialu opisuje pewne detale linuksowej implementacji semaforow POSIX. Wersje Przed Linuksem 2.6, Linux obslugiwal jedynie nienazwane semafory miedzywatkowe. W systemie z Linuksem 2.6 i biblioteka glibc udostepniajaca implementacje watkowania NPTL (Native POSIX Thread Library - biblioteka natywnych watkow POSIX), dostepna jest pelna implementacji semaforow POSIX. Trwalosc Semafory nazwane POSIX sa trwale na poziomie jadra: jesli nie zostana usuniete za pomoca sem_unlink(3), semafory beda istniec az do wylaczenia systemu. Konsolidacja Programy uzywajace API semaforow POSIX musza byc kompilowane z cc -pthread w celu polaczenia z biblioteka czasu rzeczywistego librt. Dostep do semaforow nazwanych poprzez system plikow W Linuksie, semafory nazwane sa tworzone w wirtualnym systemie plikow, montowanym zwykle w /dev/shm, z nazwami w postaci sem.jakas-nazwa (jest to powod ograniczenia rozmiaru nazw semaforow do NAME_MAX-4 znakow zamiast do NAME_MAX). Od Linuksa 2.6.19, do plikow w tym katalogu mozna stosowac listy kontroli dostepu (ACL), w celu kontroli uprawnien w oparciu o uzytkownika lub grupe. UWAGI Semafory Systemu V (semget(2), semop(2) itp.) sa starszym API semaforow. Semafory POSIX udostepniaja prostszy i lepiej zaprojektowany interfejs od semaforow Systemu V, choc z drugiej strony semafory POSIX sa mniej powszechnie dostepne (szczegolnie na starszych systemach) od semaforow Systemu V. PRZYKLADY Przyklad uzycia roznych semaforow POSIX pokazano w sem_wait(3). ZOBACZ TAKZE sem_close(3), sem_destroy(3), sem_getvalue(3), sem_init(3), sem_open(3), sem_post(3), sem_unlink(3), sem_wait(3), pthreads(7), shm_overview(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. sem_overview(7)