.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH sem_overview 7 "4 grudnia 2022 r." "Linux man\-pages 6.03" 
.SH NAZWA
sem_overview \- przegląd semaforów POSIX
.SH OPIS
Semafory POSIX pozwalają na synchronizowanie swojego działania przez procesy
i wątki.
.PP
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 (\fBsem_post\fP(3)) oraz zmniejszenie wartości semafora o
jeden \fBsem_wait\fP(3)). Jeśli wartość semafora wynosi aktualnie zero, to
operacja \fBsem_wait\fP(3) zostanie zablokowana do momentu, gdy wartość
semafora ponownie osiągnie więcej niż zero.
.PP
Semafory POSIX występują w dwóch odmianach: semaforów nazwanych i semaforów
nienazwanych.
.TP 
\fBSemafory nazwane\fP
.\" glibc allows the initial slash to be omitted, and makes
.\" multiple initial slashes equivalent to a single slash.
.\" This differs from the implementation of POSIX message queues.
.\" glibc allows subdirectory components in the name, in which
.\" case the subdirectory tree must exist under /dev/shm, and
.\" the fist subdirectory component must exist as the name
.\" sem.name, and all of the subdirectory components must allow the
.\" required permissions if a user wants to create a semaphore
.\" object in a subdirectory.
Semafor nazwany jest identyfikowany nazwą w postaci \fB/\fP\fIjakaś\-nazwa\fP. Jest
to łańcuch o wielkości do \fBNAME_MAX\fP\fI\-4\fP (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 \fBsem_open\fP(3).
.IP
Funkcja \fBsem_open\fP(3) tworzy nowy semafor nazwany lub otwiera istniejący
semafor nazwany. Po otwarciu semafora, można na nim działać za pomocą
\fBsem_post\fP(3) i \fBsem_wait\fP(3). Gdy proces zakończy używanie semafora, może
go zamknąć za pomocą \fBsem_close\fP(3). Po zakończeniu używania semafora przez
wszystkie procesy, można go usunąć z systemu za pomocą \fBsem_unlink\fP(3).
.TP 
\fBSemafory nienazwane (semafory działające w pamięci)\fP
Semafor nienazwany nie posiada nazwy. Jest natomiast umieszczany w regionie
pamięci dzielonym przez wiele wątków (\fIsemafor międzywątkowy\fP) lub procesów
(\fIsemafor międzyprocesowy\fP). 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ą \fBshmget\fP(2), lub w obiekcie pamięci dzielonej POSIX zbudowanym za
pomocą \fBshm_open\fP(3)).
.IP
Przed użyciem, konieczne jest zainicjowanie semafora nienazwanego za pomocą
\fBsem_init\fP(3). Następnie można na nim działać operacjami \fBsem_post\fP(3) i
\fBsem_wait\fP(3). Gdy semafor nie jest dłużej potrzebny, a przed zwolnieniem
pamięci w której istnieje, należy go zniszczyć za pomocą \fBsem_destroy\fP(3).
.PP
Pozostała część niniejszego rozdziału opisuje pewne detale linuksowej
implementacji semaforów POSIX.
.SS 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.
.SS Trwałość
Semafory nazwane POSIX są trwałe na poziomie jądra: jeśli nie zostaną
usunięte za pomocą \fBsem_unlink\fP(3), semafory będą istnieć aż do wyłączenia
systemu.
.SS Konsolidacja
Programy używające API semaforów POSIX muszą być kompilowane z \fIcc \-pthread\fP w celu połączenia z biblioteką czasu rzeczywistego \fIlibrt\fP.
.SS "Dostęp do semaforów nazwanych poprzez system plików"
W Linuksie, semafory nazwane są tworzone w wirtualnym systemie plików,
montowanym zwykle w \fI/dev/shm\fP, z nazwami w postaci \fBsem.\fP\fIjakaś\-nazwa\fP
(jest to powód ograniczenia rozmiaru nazw semaforów do \fBNAME_MAX\fP\fI\-4\fP
znaków zamiast do \fBNAME_MAX\fP).
.PP
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ę.
.SH UWAGI
Semafory Systemu V (\fBsemget\fP(2), \fBsemop\fP(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.
.SH PRZYKŁADY
Przykład użycia różnych semaforów POSIX pokazano w \fBsem_wait\fP(3).
.SH "ZOBACZ TAKŻE"
\fBsem_close\fP(3), \fBsem_destroy\fP(3), \fBsem_getvalue\fP(3), \fBsem_init\fP(3),
\fBsem_open\fP(3), \fBsem_post\fP(3), \fBsem_unlink\fP(3), \fBsem_wait\fP(3),
\fBpthreads\fP(7), \fBshm_overview\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
