sem_overview(7) Miscellaneous Information Manual sem_overview(7)
NOM
sem_overview - Panorama des semaphores POSIX
DESCRIPTION
Les semaphores POSIX permettent aux processus et aux threads de se
synchroniser.
Un semaphore est un entier dont la valeur ne peut jamais etre negative.
Deux operations peuvent etre effectuees : incrementer la valeur du
semaphore de 1 (sem_post(3)), ou decrementer la valeur du semaphore de
1 (sem_wait(3)). Si la valeur courante est 0, une operation sem_wait(3)
bloque jusqu'a ce que la valeur devienne strictement positive.
Les semaphores POSIX sont de deux types : les semaphores nommes et les
semaphores anonymes.
Semaphores nommes
Un semaphore nomme est identifie par un nom de la forme
/un_nom ; c'est-a-dire une chaine terminee par un caractere nul
pouvant avoir jusqu'a NAME_MAX-4 (251) caracteres, commencant
par une barre oblique (<< / >>) suivie d'un caractere ou plus,
aucun de ces derniers n'etant une barre oblique. Deux processus
peuvent utiliser un meme semaphore nomme en passant le meme nom
a sem_open(3).
La fonction sem_open(3) cree un nouveau semaphore nomme ou en
ouvre un existant. Apres l'ouverture de ce semaphore, il peut
etre utilise avec sem_post(3) et sem_wait(3). Lorsqu'un
processus a fini d'utiliser le semaphore, il peut utiliser
sem_close(3) pour le fermer. Lorsque tous les processus ont
termine de l'utiliser, il peut etre supprime du systeme avec
sem_unlink(3).
Semaphores anonymes (semaphores en memoire)
Un semaphore anonyme n'a pas de nom. Il est place dans une
region de la memoire qui est partagee entre plusieurs threads
(semaphore partage par des threads) ou processus (semaphore
partage par des processus). Un semaphore partage par des threads
est place dans une region de la memoire partagee entre les
threads d'un processus, par exemple une variable globale. Un
semaphore partage par des processus doit etre place dans une
region de memoire partagee (par exemple un segment de memoire
partagee System V cree avec shmget(2), ou un objet de memoire
partagee POSIX cree avec shm_open(3)).
Avant son utilisation, un semaphore anonyme doit etre initialise
avec sem_init(3). Il peut ensuite etre utilise avec sem_post(3)
et sem_wait(3). Lorsque le semaphore n'est plus necessaire, et
avant que la memoire ou il est place ne soit liberee, le
semaphore doit etre detruit avec sem_destroy(3).
Le reste de cette section decrit certains details specifiques a
l'implementation Linux des semaphores POSIX.
Versions
Avant Linux 2.6, Linux ne proposait que les semaphores anonymes
partages par des threads. Sur un systeme Linux 2.6 avec une glibc
fournissant l'implementation des threads NPTL, une implementation
complete des semaphores POSIX est fournie.
Persistance
Les semaphores POSIX nommes sont persistants dans le noyau : s'il n'est
pas supprime avec sem_unlink(3) un semaphore existe tant que le systeme
n'est pas eteint.
Liaison
Les programmes utilisant l'API des semaphores POSIX doivent etre
compiles avec cc -pthread pour etre lies avec la bibliotheque
temps-reel, librt.
Acceder aux semaphores nommes par le systeme de fichiers
Sous Linux, les semaphores nommes sont crees sur un systeme de fichiers
virtuel, en general monte sur /dev/shm, avec des noms de la forme
sem.un_nom (ce qui explique que les noms des semaphores soient limites
a NAME_MAX-4 plutot qu'a NAME_MAX caracteres).
Depuis Linux 2.6.19, il est possible de placer des listes de controle
d'acces sur les fichiers de ce repertoire au niveau groupe et
utilisateur.
NOTES
Les semaphores System V (semget(2), semop(2), etc.) sont une API de
semaphores plus vieille. Les semaphores POSIX fournissent une interface
plus simple et mieux concue que les semaphores System V. En revanche,
les semaphores POSIX sont moins largement disponibles que les
semaphores System V (surtout sur les systemes plus anciens).
EXEMPLES
Un exemple d'utilisation des diverses fonctions des semaphores POSIX
est donne dans sem_wait(3).
VOIR AUSSI
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)
TRADUCTION
La traduction francaise de cette page de manuel a ete creee par
Christophe Blaess , Stephan Rafin
, Thierry Vignaud ,
Francois Micaux, Alain Portal , Jean-Philippe
Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas
Huriaux , Nicolas Francois
, Florentin Duneau
, Simon Paillard , Denis Barbier et David Prevot
Cette traduction est une documentation libre ; veuillez vous reporter a
la GNU General Public License version 3
concernant les conditions
de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE.
Si vous decouvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message a .
Pages du manuel de Linux 6.9.1 2 mai 2024 sem_overview(7)