Bonjour,
Actuellement je tente de comprendre les IPC de type sémaphore en codant un programme qui crée 20 processus, chaque processus correspond à une personne qui veut rentrer dans un ascenseur de manière synchronisé de façon à ce qu’il n’y ait qu’une personne dans l’ascenseur à la fois. Dès qu’un processus est rentré dans l’ascenseur (la zone critique du sem) il se termine.
[code]#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main(int argc, char * argv[]) {
int i;
int N = 20;
pid_t tab[N];
key_t cle;
int semid;
int val[1]={1};
struct sembuf p, v;
cle = ftok(argv[0],0);
semid = semget(cle,1,IPC_CREAT|0666);
semctl(semid,0,SETVAL,val);
p.sem_num = 0;
p.sem_op = -1;
p.sem_flg = 0;
v.sem_num = 0;
v.sem_op = 1;
v.sem_flg = 0;
for(i=0; i<N; i++) {
tab[i] = fork();
if(tab[i] == 0) {
semop(semid, &p, 1);
printf("Je suis le fils %d et je rentre dans l'ascenseur",getpid());
semop(semid, &v, 1);
return EXIT_SUCCESS;
} else {
sleep(2);
semctl(semid, 0, IPC_RMID, 0);
return EXIT_SUCCESS;
}
}
}[/code]
Je suis sous Debian amd64 et ce programme n’affiche rien. Est ce que quelqu’un pourrait m’éclairer ?
Merci d’avance !