.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2006 Michael Kerrisk .\" .\" 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.05.01" .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 . .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 .