Man page - sem_overview(7)

Packages contains this manual

Available languages:

en fr pl ja ru ro

Manual

sem_overview

NAZWA
OPIS
Wersje
Trwałość
Konsolidacja
Dostęp do semaforów nazwanych poprzez system plików
UWAGI
PRZYKŁADY
ZOBACZ TAKŻE
TŁUMACZENIE

NAZWA

sem_overview - przegląd semaforów POSIX

OPIS

Semafory POSIX pozwalają na synchronizowanie swojego działania przez procesy i wątki.

Semafor jest liczbą całkowitą, której wartość nie może spaść poniżej zera. Na semaforach można przeprowadzić dwa działania: zwiększenie wartości semafora o jeden ( sem_post (3)) oraz zmniejszenie wartości semafora o jeden sem_wait (3)). Jeśli wartość semafora wynosi aktualnie zero, to operacja sem_wait (3) zostanie zablokowana do momentu, gdy wartość semafora ponownie osiągnie więcej niż zero.

Semafory POSIX występują w dwóch odmianach: semaforów nazwanych i semaforów nienazwanych.
Semafory nazwane

Semafor nazwany jest identyfikowany nazwą w postaci / jakaś-nazwa . Jest to łańcuch o wielkości do NAME_MAX -4 (tj. 251) znaków, zaczynający się początkowym ukośnikiem, po którym występuje jeden lub więcej znaków niebędących ukośnikiem i zakończony znakiem null. Na tym samym semaforze nazwanym mogą działać dwa procesy, podając tę samą nazwę do sem_open (3).

Funkcja sem_open (3) tworzy nowy semafor nazwany lub otwiera istniejący semafor nazwany. Po otwarciu semafora, można na nim działać za pomocą sem_post (3) i sem_wait (3). Gdy proces zakończy używanie semafora, może go zamknąć za pomocą sem_close (3). Po zakończeniu używania semafora przez wszystkie procesy, można go usunąć z systemu za pomocą sem_unlink (3).

Semafory nienazwane (semafory działające w pamięci)

Semafor nienazwany nie posiada nazwy. Jest natomiast umieszczany w regionie pamięci dzielonym przez wiele wątków ( semafor międzywątkowy ) lub procesów ( semafor międzyprocesowy ). Semafor międzywątkowy jest umieszczany w przestrzeni pamięci dzielonej przez wątki procesu, np. w zmiennej globalnej. Semafory międzyprocesowe muszą zostać umieszczone w przestrzeni pamięci dzielonej (np. w segmencie pamięci dzielonej Systemu V utworzonej za pomocą shmget (2), lub w obiekcie pamięci dzielonej POSIX zbudowanym za pomocą shm_open (3)).

Przed użyciem, konieczne jest zainicjowanie semafora nienazwanego za pomocą sem_init (3). Następnie można na nim działać operacjami sem_post (3) i sem_wait (3). Gdy semafor nie jest dłużej potrzebny, a przed zwolnieniem pamięci w której istnieje, należy go zniszczyć za pomocą sem_destroy (3).

Pozostała część niniejszego rozdziału opisuje pewne detale linuksowej implementacji semaforów POSIX.

Wersje

Przed Linuksem 2.6, Linux obsługiwał jedynie nienazwane semafory międzywątkowe. W systemie z Linuksem 2.6 i biblioteką glibc udostępniającą implementację wątkowania NPTL (Native POSIX Thread Library - biblioteka natywnych wątków POSIX), dostępna jest pełna implementacji semaforów POSIX.

Trwałość

Semafory nazwane POSIX są trwałe na poziomie jądra: jeśli nie zostaną usunięte za pomocą sem_unlink (3), semafory będą istnieć aż do wyłączenia systemu.

Konsolidacja

Programy używające API semaforów POSIX muszą być kompilowane z cc -pthread w celu połączenia z biblioteką czasu rzeczywistego librt .

Dostęp do semaforów nazwanych poprzez system plików

W Linuksie, semafory nazwane są tworzone w wirtualnym systemie plików, montowanym zwykle w /dev/shm , z nazwami w postaci sem. jakaś-nazwa (jest to powód ograniczenia rozmiaru nazw semaforów do NAME_MAX -4 znaków zamiast do NAME_MAX ).

Od Linuksa 2.6.19, do plików w tym katalogu można stosować listy kontroli dostępu (ACL), w celu kontroli uprawnień w oparciu o użytkownika lub grupę.

UWAGI

Semafory Systemu V ( semget (2), semop (2) itp.) są starszym API semaforów. Semafory POSIX udostępniają prostszy i lepiej zaprojektowany interfejs od semaforów Systemu V, choć z drugiej strony semafory POSIX są mniej powszechnie dostępne (szczególnie na starszych systemach) od semaforów Systemu V.

PRZYKŁADY

Przykład użycia różnych semaforów POSIX pokazano w sem_wait (3).

ZOBACZ TAKŻE

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)

TŁUMACZENIE

Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net .