SEM_OVERVIEW
Section : Manuel du programmeur Linux (
7)
Mise à jour de la version anglaise : 15 juin 2008
Index
Menu principal
NOM
sem_overview - Vue d'ensemble des sémaphores POSIX
DESCRIPTION
Les sémaphores POSIX permettent aux processus et aux threads
de synchroniser leurs actions.
Un sémaphore est un entier dont la valeur ne doit jamais descendre
en dessous de zéro.
Deux opérations peuvent être effectuées sur un sémaphore :
incrémenter la valeur du sémaphore par un
(sem_post(3)) ;
décrémenter la valeur du sémaphore par un
(sem_wait(3)).
Si la valeur d'un sémaphore est zéro, une opération
sem_wait(3)
bloquera jusqu'à ce que la valeur devienne supérieure à zéro.
Les sémaphores POSIX ont deux formes possibles :
les sémaphores nommés et les sémaphores non nommés.
- Sémaphores nommés
-
Un sémaphore nommé est identifié par un nom de la forme
/unnom.
Deux processus peuvent opérer sur le 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 que le sémaphore ait été ouvert, on peut y travailler dessus avec
sem_post(3)
et
sem_wait(3).
Lorsqu'un processus a fini d'utiliser un sémaphore, on peut utiliser
sem_close(3)
pour fermer le sémaphore.
Lorsque tous les processus ont fini d'utiliser le sémaphore,
celui-ci peut être supprimé du système avec
sem_unlink(3).
- Sémaphores non nommés (sémaphores basés sur la mémoire)
-
Un sémaphore non nommé n'a pas de nom.
À la place, il est placé dans une région de la mémoire qui est partagée
entre plusieurs threads (un
sémaphore partagé entre threads)
ou processus (un
sémaphore partagé entre processus).
Un sémaphore partagé entre threads est placé dans une zone mémoire
partagée entre les threads d'un processus,
par exemple, une variable globale.
Un sémaphore partagé entre processus doit être placé dans une région
mémoire partagée (par exemple, un segment de mémoire partagée System V
créé avec
semget(2),
ou un objet mémoire partagée POSIX créé avec
shm_open(3)).
Avant d'être utilisé, un sémaphore non nommé doit être initialisé avec
sem_init(3).
On peut ensuite travailler dessus avec
sem_post(3)
et
sem_wait(3).
Lorsque le sémaphore n'est plus nécessaire et avant que la mémoire dans
laquelle il est situé ne soit désallouée,
le sémaphore devrait être détruit avec
sem_destroy(3).
La suite de cette section décrit quelques détails spécifiques à
l'implémentation Linux des sémaphores POSIX.
Versions
Avant le noyau 2.6, Linux ne supportait que les sémaphores non nommés
et partagés entre threads.
Sur un système disposant de Linux 2.6 et d'une glibc fournissant
l'implémentation de threading NPTL, l'implémentation complète
des sémaphores POSIX est fournie.
Persistence
Les sémaphores nommés ont la persistance du noyau :
s'il n'est pas supprimé avec
sem_unlink(3),
un sémaphore existera jusqu'à ce que le système soit arrêté.
Édition de liens
Les programmes utilisant l'API des sémaphores POSIX
doivent être compilés avec
cc -lrt
pour être liés avec la bibliothèque temps réel
librt.
Accéder aux sémaphores nommés via le système de fichiers
Sous Linux, les sémaphores nommés sont créés sur un système de fichiers
virtuel, normalement monté sur
/dev/shm,
avec des noms de la forme
sem.nom.
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.
CONFORMITÉ
POSIX.1-2001.
NOTES
Les sémaphores System V
(
semget(2),
semop(2),
etc.) sont une ancienne API de sémaphores.
Les sémaphores POSIX fournissent une interface bien mieux conçue
que celles de System V ; d'un autre coté, les sémaphores POSIX
sont moins largement disponibles (particulièrement sur d'anciens systèmes)
que ceux de System V.
EXEMPLE
Un exemple de l'utilisation des différentes fonctions des sémaphores POSIX
se trouve dans la page
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)
TRADUCTION
Ce document est une traduction réalisée par Alain Portal
<aportal AT univ-montp2 DOT fr> le 29 juillet 2006
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 7 sem_overview ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- DESCRIPTION
-
- Versions
-
- Persistence
-
- Édition de liens
-
- Accéder aux sémaphores nommés via le système de fichiers
-
- CONFORMITÉ
-
- NOTES
-
- EXEMPLE
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008