Provided by: manpages-ro_4.21.0-2_all 

NUME
sem_overview - prezentare generală a semafoarelor POSIX
DESCRIERE
Semafoarele POSIX permit proceselor și firelor de execuție să își sincronizeze acțiunile.
Un semafor este un număr întreg a cărui valoare nu este permisă niciodată să scadă sub zero. Se pot
efectua două operații asupra semafoarelor: creșterea valorii semafoarelor cu unu (sem_post(3)); și
descreșterea valorii semafoarelor cu unu (sem_wait(3)). În cazul în care valoarea unui semafor este în
prezent zero, atunci o operațiune sem_wait(3) se blochează până când valoarea devine mai mare decât zero.
Semafoarele POSIX se prezintă sub două forme: semafoare cu nume și semafoare fără nume.
Semafoare cu nume
Un semafor cu nume este identificat printr-un nume de forma /nume-oarecare; adică un șir de până
la NAME_MAX-4 (adică 251) de caractere cu terminație nulă, format dintr-o bară oblică inițială,
urmată de unul sau mai multe caractere, dintre care niciunul nu este o bară oblică. Două procese
pot funcționa pe același semafor cu nume, trecând același nume la sem_open(3).
Funcția sem_open(3) creează un nou semafor cu nume sau deschide un semafor cu nume existent. După
ce semaforul a fost deschis, acesta poate fi operat cu ajutorul funcțiilor sem_post(3) și
sem_wait(3). Atunci când un proces a terminat de utilizat semaforul, acesta poate utiliza
sem_close(3) pentru a închide semaforul. Atunci când toate procesele au terminat de utilizat
semaforul, acesta poate fi eliminat din sistem folosind sem_unlink(3).
Semafoare fără nume (semafoare bazate pe memorie)
Un semafor fără nume nu are un nume. În schimb, semaforul este plasat într-o regiune de memorie
care este partajată între mai multe fire de execuție (un semafor thread-shared semaphore) sau
procese (un semafor process-shared semaphore). Un semafor partajat de fire este plasat într-o
zonă de memorie partajată între firele unui proces, de exemplu, o variabilă globală. Un semafor
partajat de proces trebuie plasat într-o regiune de memorie partajată (de exemplu, un segment de
memorie partajată System V creat cu ajutorul shmget(2) sau un obiect de memorie partajată POSIX
creat cu ajutorul shm_open(3)).
Înainte de a fi utilizat, un semafor fără nume trebuie inițializat cu ajutorul sem_init(3).
Acesta poate fi apoi operat cu ajutorul sem_post(3) și sem_wait(3). Atunci când nu mai este
necesar și înainte ca memoria în care este localizat să fie eliberată, semaforul trebuie distrus
folosind sem_destroy(3).
Restul acestei secțiuni descrie câteva detalii specifice ale implementării în Linux a semafoarelor POSIX.
Versiuni
Înainte de Linux 2.6, Linux a acceptat doar semafoare fără nume, partajate pe fire de execuție. Într-un
sistem cu Linux 2.6 și o bibliotecă „glibc” care oferă implementarea NPTL a firelor de execuție, este
furnizată o implementare completă a semafoarelor POSIX.
Persistența
Semafoarele POSIX cu nume sunt persistente în nucleu: dacă nu este eliminat de sem_unlink(3), un semafor
va exista până la închiderea sistemului.
Vincularea
Programele care utilizează API-ul POSIX pentru semafoare trebuie compilate cu cc -pthread pentru a face
legătura cu biblioteca „în timp real”, librt.
Accesarea semafoarelor cu nume prin intermediul sistemului de fișiere
În Linux, semafoarele cu nume sunt create într-un sistem de fișiere virtual, montat în mod normal sub
/dev/shm, cu nume de forma sem.nume-oarecare (acesta este motivul pentru care numele de semafoare sunt
limitate la NAME_MAX-4, mai degrabă decât la NAME_MAX caractere).
Începând cu Linux 2.6.19, se pot plasa ACL-uri pe fișierele din acest director, pentru a controla
permisiunile obiectelor pentru fiecare utilizator și grup în parte.
NOTE
Semafoarele din System V (semget(2), semop(2) etc.) reprezintă o API de semafoare mai veche. Semafoarele
POSIX oferă o interfață mai simplă și mai bine concepută decât semafoarele System V; pe de altă parte,
semafoarele POSIX sunt mai puțin disponibile pe scară largă (în special pe sistemele mai vechi) decât
semafoarele System V.
EXEMPLE
Un exemplu de utilizare a diferitelor funcții de semaforizare POSIX este prezentat în sem_wait(3).
CONSULTAȚI ȘI
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)
TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
Pagini de manual de Linux 6.03 4 decembrie 2022 sem_overview(7)