sem_overview   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (7)
Updated: 25 mars 2006
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
sem_overview - Vue d'ensemble des sémaphores POSIX  



DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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.  



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
POSIX.1-2001.  



NOTES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Un exemple de l'utilisation des différentes fonctions des sémaphores POSIX se trouve dans la page sem_wait(3).  



VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
sem_close(3), sem_destroy(3), sem_init(3), sem_getvalue(3), sem_open(3), sem_post(3), sem_unlink(3), sem_wait(3), pthreads(7)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 6 juin 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.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
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

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Sémaphores nommésDESCRIPTION
Sémaphores non-nommés (sémaphores basés sur la mémoire)DESCRIPTION



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:49:26, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional