1 2 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 29 30
|
/* --------------------------------------------------------------------------
operation_sur_semaphore ()
--------------------------------------------------------------------------
Role : permet d'effectuer une operation sur un semaphore (decrementation ou
incrementation)
Retourne 0 si succes, -1 sinon
-------------------------------------------------------------------------- */
int operation_sur_semaphore (int num_jeu_semaphore, int valeur_operation)
{
/* On cree une structure sembuf qui nous permettra d'effectuer l'operation
voulue sur le semaphore */
struct sembuf operation[1];
/* On choisi le semaphore sur lequel on desire effectuer l'operation */
/* Ici on travaille sur 1 seul semaphore (le semaphore n° 0) */
operation[0].sem_num = 0;
/* on selectionne la valeur de l'operation a effectuer */
operation[0].sem_op = valeur_operation;
/* On positionne le flag sur 0 : operation bloquante + SEM_UNDO : eviter
l'interblocage */
operation[0].sem_flg = 0 | SEM_UNDO;
/* La structure sembuf est correctement initialisee on fait appel a semop
pour agir sur le sempahore correspondant */
return semop (num_jeu_semaphore, operation, 1);
} |