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