P et V sous UNIX
Remarques: Pour écrire simplement P et V sous UNIX nous créons des ensembles contenant un seul sémaphore. Pour simplifier, il n'y a pas de gestion d'erreur dans les fonctions.
P(sem)
V(sem)
int P(int sem)
{struct sembuf operat; /*  Une seule opération*/
operat.sem_num = 0; /* Un seul sémaphore donc 0 */
operat.sem_op = -1; /*  il faut décrémenter de 1 */
operat.sem_flg = 0; /*  bloquant si non passant*/ 
return(semop(sem, &operat, 1));}

int V(int sem)
{struct sembuf operat; /*  Une seule opération*/
operat.sem_num = 0; /* Un seul sémaphore donc 0 */
operat.sem_op = 1;  /*  il faut incrémenter de 1 */
operat.sem_flg = 0; /*  toujours passant */ 
return(semop(sem, &operat, 1));}

CreerSemaphore(clé,valeur_init)
DetruireSemaphore(num)
int CreerSemaphore(key_t cle_ext, int valeur_init)
{int sem;
sem = semget(cle_ext, 1, 0666);
if (errno==ENOENT) {sem = semget(cle_ext, 1, 0666|IPC_CREAT);
semctl(sem, 0, SETVAL, valeur_init);}
return(sem);}

int DetruireSemaphore(int sem)
{
return(semctl(sem,1, IPC_RMID,0));
}


D'autres fonction utiles liées aux clés externes:

RecupSem(key_t cle_ext)
Permet de récupérer le numéro de sémaphore associé à une clé externe

key_t ftok (const char *nom_fic, int num)

int RecupSem(key_t cle_ext)
{ return(semget(cle_ext,1, 0); }


Cette fonction C (#include <sys/ipc.h> ) permet de récupérer une clé externe unique à partir du PID du fichier nom_fic et du nombre num.

suivant
   plan