oracular (7) sem_overview.7.gz

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⟩.