Provided by: manpages-fr_4.15.0-9_all bug

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 une
              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.

   Liaison
       Les programmes utilisant l'API des sémaphores POSIX doivent être compilés avec cc -pthread
       pour être liés 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.

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).

EXEMPLES

       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), shm_overview(7)

COLOPHON

       Cette page fait partie de la publication 5.13 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.