Provided by: manpages-pl_4.26.0-1_all 

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
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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.
Linux man-pages 6.9.1 2 maja 2024 r. sem_overview(7)