Provided by: manpages-pl_4.23.1-1_all bug

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.