Next: La primitive de contrôle Up: Les sémaphores Previous: Les sémaphores

La primitive de manipulation semop()

La primitive

#include <sys/sem.h>
int semop(int dipc, struct sembuf *sops, unsigned int nsops);
est utilisée pour réaliser un tableau d'opérations de sémaphores sur un ensemble de sémaphores indiqué par dipc. sops est un pointeur sur tableau de structures sembuf, et nsops indique le nombre d'éléments du tableau.

La structure sembuf

  struct sembuf {
      unsigned short int sem_num;    /* # sémaphore */
      short              sem_op;     /* opération du sémaphore */
      short              sem_flg;    /* flags de l'opération */
  };
Nature de l'opération dans la structure sembuf

Si sem_num > 0
tex2html_wrap_inline5855 une opération V est effectuée sur le sémaphore sem_num
Si sem_num < 0
tex2html_wrap_inline5855 une opération P est effectuée sur le sémaphore |sem_num|
Si sem_num == 0
c'est une opération d'attente qui se termine quand l'ensemble des sémaphores désignés par dipc sont à zéro.

La primitive

#include <sys/sem.h>
int semop (int dipc, struct sembuf *tab_op, int nb_op);
Les nb_op opérations placées à l'adresse tab_op sont réalisées atomiquement, c'est à dire toutes réalisées ou aucune !! Le noyau gérant l'atomicité. Si la i-ème opération ne peut être réalisée, les (i-1) premières sont annulées.

Chaque opération du tableau peut être rendue non bloquante.

Le fait d'avoir un appel bloquant on non bloquant va donc dépendre de l'ordre dans lequel on place les opérations à effectuer dans le tableau ...

Les cas d'échec

EINVAL
identification invalide
EACCESS
accès interdit
E2BIG
trop d'opérations
EFBIG
numéro de sémaphore incorrect
EAGAIN
Non réalisable + non bloquant
EINVAL,ENOSPC
trop d'opérations ou de SEM_UNDO
ERANGE
valeur du sémaphore trop grande !!
EINTR
interruption
EIDRM
sem supprimé



Dominique REVUZ
Mon Feb 2 12:10:31 MET 1998
Une Bug Un mail Merci