Linux

CentOS 5.3

sem_overview(7)


SEM_OVERVIEW

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 Système 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).

DÃTAILS SPÃCIFIQUES LINUX

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

CONFORMITÃ

POSIX.1-2001.

NOTES

Les sémaphores Système 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 Système V ; d’un autre coté, les sémaphores POSIX sont moins largement disponibles (particulièrement sur d’anciens systèmes) que ceux de Système 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_init(3), sem_getvalue(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 30 juillet 2006.

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=en man 7 sem_overview ». N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


sem_overview(7)