NOM¶
sem_overview - Panorama des sémaphores POSIX
DESCRIPTION¶
Les sémaphores POSIX permettent aux processus et aux threads de se
synchroniser.
Un sémaphore est un entier dont la valeur ne peut jamais être
négative. Deux opérations peuvent être
effectuées : incrémenter la valeur du sémaphore de
1 (
sem_post(3)), ou décrémenter la valeur du
sémaphore de 1 (
sem_wait(3)). Si la valeur courante est 0, une
opération
sem_wait(3) bloque jusqu'à ce que la valeur
devienne strictement positive.
Les sémaphores POSIX sont de deux types : les sémaphores
nommés et les sémaphores anonymes.
- Sémaphores nommés
- Un sémaphore nommé est identifié par un nom de la
forme /un_nom ; c'est-à-dire un chaîne
terminée par un caractère nul pouvant avoir jusqu'à
NAME_MAX-4 (251) caractères,
commençant par une barre oblique
(« / ») suivie d'un caractère ou plus,
aucun de ces derniers n'étant une barre oblique. Deux processus
peuvent utiliser un même sémaphore nommé en passant
le même nom à sem_open(3).
La fonction sem_open(3) crée un nouveau sémaphore
nommé ou en ouvre un existant. Après l'ouverture de ce
sémaphore, il peut être utilisé avec
sem_post(3) et sem_wait(3). Lorsqu'un processus a fini
d'utiliser le sémaphore, il peut utiliser sem_close(3) pour
le fermer. Lorsque tous les processus ont terminé de l'utiliser, il
peut être supprimé du système avec
sem_unlink(3).
- Sémaphores anonymes (sémaphores en
mémoire)
- Un sémaphore anonyme n'a pas de nom. Il est placé dans une
région de la mémoire qui est partagée entre plusieurs
threads ( sémaphore partagé par des threads)
ou processus ( sémaphore partagé par des processus).
Un sémaphore partagé par des threads est placé dans
une région de la mémoire partagée entre les threads
d'un processus, par exemple une variable globale. Un sémaphore
partagé par des processus doit être placé dans une
région de mémoire partagée (par exemple un segment de
mémoire partagée System V créé avec
shmget(2), ou un objet de mémoire partagée POSIX
créé avec shm_open(3)).
Avant son utilisation, un sémaphore anonyme doit être
initialisé avec sem_init(3). Il peut ensuite être
utilisé avec sem_post(3) et sem_wait(3). Lorsque le
sémaphore n'est plus nécessaire, et avant que la
mémoire où il est placé ne soit
libérée, le sémaphore doit être détruit
avec sem_destroy(3).
Le reste de cette section décrit certains détails
spécifiques à l'implémentation Linux des
sémaphores POSIX.
Versions¶
Avant le noyau 2.6, Linux ne proposait que les sémaphores anonymes
partagés par des threads. Sur un système Linux 2.6 avec
une glibc fournissant l'implémentation des threads NPTL, une
implémentation complète des sémaphores POSIX est fournie.
Persistance¶
Les sémaphores POSIX nommés sont persistants dans le
noyau : s'il n'est pas supprimé avec
sem_unlink(3) un
sémaphore existe tant que le système n'est pas éteint.
Édition des liens¶
Les programmes utilisant l'API des sémaphores POSIX doit être
compilé avec
cc -pthread pour être lié avec la
bibliothèque temps‐réel,
librt.
Accéder aux sémaphores nommés par le système de fichiers¶
Sous Linux, les sémaphores nommés sont créés sur un
système de fichiers virtuel, en général monté sur
/dev/shm, avec des noms de la forme
sem.un_nom (ce qui
explique que les noms des sémaphores soient limités à
NAME_MAX -4 plutôt qu'à
NAME_MAX
caractères).
Depuis Linux 2.6.19, il est possible de placer des listes de
contrôle d'accès sur les fichiers de ce répertoire au
niveau groupe et utilisateur.
POSIX.1-2001.
NOTES¶
Les sémaphores System V (
semget(2),
semop(2), etc.)
sont une API de sémaphores plus vieille. Les sémaphores POSIX
fournissent une interface plus simple et mieux conçue que les
sémaphores System V. En revanche, les sémaphores POSIX
sont moins largement disponibles que les sémaphores System V
(surtout sur les systèmes plus anciens).
EXEMPLE¶
Un exemple d'utilisation des diverses fonctions des sémaphores POSIX est
donné 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)
COLOPHON¶
Cette page fait partie de la publication 3.65 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce
document en utilisant la commande «
man -L C
<section>
<page_de_man> ».