| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 |  
int binary_semaphore_wait (int semid)
{
  struct sembuf operations[1];
  /* Utilise le premier (et unique) sémaphore.  */
  operations[0].sem_num = 0;
  /* Décrémente d'une unité. */
  operations[0].sem_op = -1;
  /* Autorise l'annulation. */
  operations[0].sem_flg = SEM_UNDO;
 
  return semop (semid, operations, 1);
}
 
/* Envoie un signal de réveil à un sémaphore binaire : incrémente sa valeur
   d'une unité. Sort de la fonction immédiatement. */
int binary_semaphore_post (int semid)
{
  struct sembuf operations[1];
  /* Utilise le premier (et unique) sémaphore. */
  operations[0].sem_num = 0;
  /* Incrémente d'une unité. */
  operations[0].sem_op = 1;
  /* Autorise l'annulation. */
  operations[0].sem_flg = SEM_UNDO;
 
  return semop (semid, operations, 1);
} | 
Partager