ciao a tutti, c'è qualcosa che non mi torna in questo codice che ho fatto. Dopo la wait e dopo il signal faccio stampare a video il valore del semaforo ed è sempre 0, come è possibile se l'ho inizializzato a 1?
codice:#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <stdlib.h> #include <stdio.h> #define KEY 1901 main() { int semid = semget(KEY, 2, IPC_CREAT | 0600); semctl(semid, 0, SETVAL, 1); //creo 5 figli int i,x, num_rich; for(i=0;i<5;i++){ x=fork(); if(!x) { break; } } if(!x){ //WAIT struct sembuf cmd={0,-1,0}; semop(semid, &cmd,1); int val = semctl(semid, 0, GETVAL, NULL); printf("valore del semaforo0 dopo WAIT: %d, il mio pid: %d \n", val, getpid()); sleep(10); printf("SON PASSATO IO %d \n", getpid()); //SIGNAL struct sembuf cmd2={0,1,0}; semop(semid, &cmd2,1); val = semctl(semid, 0, GETVAL, NULL); printf("valore del semaforo0 dopo SIGNAL: %d, il mio pid: %d \n", val, getpid()); }}

Rispondi quotando