sem_overview(7) Miscellaneous Information Manual sem_overview(7) NOM sem_overview - Panorama des semaphores POSIX DESCRIPTION Les semaphores POSIX permettent aux processus et aux threads de se synchroniser. Un semaphore est un entier dont la valeur ne peut jamais etre negative. Deux operations peuvent etre effectuees : incrementer la valeur du semaphore de 1 (sem_post(3)), ou decrementer la valeur du semaphore de 1 (sem_wait(3)). Si la valeur courante est 0, une operation sem_wait(3) bloque jusqu'a ce que la valeur devienne strictement positive. Les semaphores POSIX sont de deux types : les semaphores nommes et les semaphores anonymes. Semaphores nommes Un semaphore nomme est identifie par un nom de la forme /un_nom ; c'est-a-dire une chaine terminee par un caractere nul pouvant avoir jusqu'a NAME_MAX-4 (251) caracteres, commencant par une barre oblique (<< / >>) suivie d'un caractere ou plus, aucun de ces derniers n'etant une barre oblique. Deux processus peuvent utiliser un meme semaphore nomme en passant le meme nom a sem_open(3). La fonction sem_open(3) cree un nouveau semaphore nomme ou en ouvre un existant. Apres l'ouverture de ce semaphore, il peut etre utilise avec sem_post(3) et sem_wait(3). Lorsqu'un processus a fini d'utiliser le semaphore, il peut utiliser sem_close(3) pour le fermer. Lorsque tous les processus ont termine de l'utiliser, il peut etre supprime du systeme avec sem_unlink(3). Semaphores anonymes (semaphores en memoire) Un semaphore anonyme n'a pas de nom. Il est place dans une region de la memoire qui est partagee entre plusieurs threads (semaphore partage par des threads) ou processus (semaphore partage par des processus). Un semaphore partage par des threads est place dans une region de la memoire partagee entre les threads d'un processus, par exemple une variable globale. Un semaphore partage par des processus doit etre place dans une region de memoire partagee (par exemple un segment de memoire partagee System V cree avec shmget(2), ou un objet de memoire partagee POSIX cree avec shm_open(3)). Avant son utilisation, un semaphore anonyme doit etre initialise avec sem_init(3). Il peut ensuite etre utilise avec sem_post(3) et sem_wait(3). Lorsque le semaphore n'est plus necessaire, et avant que la memoire ou il est place ne soit liberee, le semaphore doit etre detruit avec sem_destroy(3). Le reste de cette section decrit certains details specifiques a l'implementation Linux des semaphores POSIX. Versions Avant Linux 2.6, Linux ne proposait que les semaphores anonymes partages par des threads. Sur un systeme Linux 2.6 avec une glibc fournissant l'implementation des threads NPTL, une implementation complete des semaphores POSIX est fournie. Persistance Les semaphores POSIX nommes sont persistants dans le noyau : s'il n'est pas supprime avec sem_unlink(3) un semaphore existe tant que le systeme n'est pas eteint. Liaison Les programmes utilisant l'API des semaphores POSIX doivent etre compiles avec cc -pthread pour etre lies avec la bibliotheque temps-reel, librt. Acceder aux semaphores nommes par le systeme de fichiers Sous Linux, les semaphores nommes sont crees sur un systeme de fichiers virtuel, en general monte sur /dev/shm, avec des noms de la forme sem.un_nom (ce qui explique que les noms des semaphores soient limites a NAME_MAX-4 plutot qu'a NAME_MAX caracteres). Depuis Linux 2.6.19, il est possible de placer des listes de controle d'acces sur les fichiers de ce repertoire au niveau groupe et utilisateur. NOTES Les semaphores System V (semget(2), semop(2), etc.) sont une API de semaphores plus vieille. Les semaphores POSIX fournissent une interface plus simple et mieux concue que les semaphores System V. En revanche, les semaphores POSIX sont moins largement disponibles que les semaphores System V (surtout sur les systemes plus anciens). EXEMPLES Un exemple d'utilisation des diverses fonctions des semaphores POSIX est donne 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) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier et David Prevot Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 sem_overview(7)