next up previous contents index
suivant: 7.4 Autres techniques de monter: 7. Communications inter-processus précédent: 7.2 Les tubes   Table des matières   Index


7.3 Synchronisation : sémaphores

Les sémaphores sont des outils de synchronisation très pratiques pour gérer l'accès concurrent (c'est à dire simultané) de plusieurs processus à une ressource critique (non partageable, par exemple un périphérique).

UNIX système V à introduit une implémentation très complète des sémaphores, qui est maintenant disponible dans presque (?) toutes les versions POSIX.

Nous allons détailler les appels systèmes permettant de manipuler des sémaphores en langage C. Ces primitives sont plus générales que celles vues en cours (P(), V()). C'est pourquoi leurs paramètres semblent compliqués. Nous n'expliquons ici que le minimum nécessaire à l'utilisation de base.

   #include <sys/sem.h>
   int semget( key_t key, int nbsems, int flags );
semget() est utilisé soit pour créer un nouveau sémaphore, soit pour récupérer l'identificateur d'un sémaphore existant. Retourne un identificateur (nombre entier utilisé dans les autres primitives), ou -1 en cas d'erreur.

Le paramètre key est un entier qui est une sorte de nom du sémaphore, permettant à tous les processus de le repérer. On l'obtient à l'aide des appels getcwd() et ftok() que nous ne détaillons pas ici (cf TD).

Le paramètre flags donne les droits sur le sémaphore. S'il comporte la valeur IPC_CREAT, un nouveau sémaphore est créé; sinon, un sémaphore récupère un sémaphore déja existant.

   int semctl( int semid, int num, int cmd, arg )
permet de changer la valeur du semaphore identifié par semid. Utilisé pour donner la valeur initiale du sémaphore après sa création.

   int semop( int semid, sops, nops )
applique une opération sur le sémaphore (augmente ou baisse la valeur). Si la valeur devient négative, met le processus en attente (cf cours sur les sémaphores).

Voir l'utilisation de ces primitives en TD.


next up previous contents index
suivant: 7.4 Autres techniques de monter: 7. Communications inter-processus précédent: 7.2 Les tubes   Table des matières   Index
Emmanuel Viennet
1999-01-05