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)); } |
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); } |