ho un problema con la gestione dei semafori, il codice e' questo postato sotto, e il problema e' semplice: il semaforo viene semplicemente ignorato...ovvero il processo 1 manda la wait al semaforo ed entra nella sua sezione critica...e il processo 2 riesce a entrare nella sua sezione critica prima che il processo 1 abbia rilasciato il semaforo stesso
se compilate ed eseguite il risultato finale e'
Processo1 in sezione critica
Processo2 in sezione critica
Processo1 uscito dalla sez.
Processo2 uscito dalla sez.
e poi infine mi manda il msg "errore rilascio semaforo nel processo2"...
qualcuno puo aiutarmi?
//main
if (argc==1) {
//processo1
sem = CreateSemaphore(NULL,1,1,"mio_semaforo");
if (sem==NULL) puts("Errore nella creazione del semaforo (processo padre)");
proc = CreateProcess("prova_semafori.exe","prova_semafori .exe figlio",
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&s,
&p);
if (proc==0) printf("Chiamata fallita\n");
WaitForSingleObject(sem,INFINITE);
puts("Processo 1 in sezione critica");
system("PAUSE");
if(!ReleaseSemaphore(sem,1,NULL))puts("errore rilascio semaforo processo 1");
puts("Processo 1 Uscito dalla sezione critica");
system("PAUSE");
}
else {
//processo2
sem = OpenSemaphore(MUTEX_ALL_ACCESS,FALSE,"mio_semaforo ");
if (sem==NULL) puts("Errore nell'apertura del semaforo (processo figlio)");
WaitForSingleObject(sem,INFINITE);
puts("Processo 2 in sezione critica");
system("PAUSE");
if(!ReleaseSemaphore(sem,1,NULL)) puts("errore rilascio semaforo processo 2");
puts("Processo 2 Uscito dalla sezione critica");
system("PAUSE");
}
return 0;