soulbw
06-02-2012, 14:17
Ciao a tutti,
come si implementa un server Concorrente in c? mi spiego meglio, so che si usa la fork per far demandare la gestione di un servizio ad un figlio e rimettere il server in ascolto, ma il mio dubbio sorge nel momento in cui bisogna rilevare la fine del figlio e quindi teoricamente bisogna usare la wait...ma cosi facendo di fatto non perdo la concorrenza?
esempio schema server concorrente:
for(;;)
{
accept....
if(fork()==0)
{
.......gestione servizio
}
wait(); --qui praticamente attendo ogni figlio e allora e' come se fosse sequenziale?
}
se invece faccio cosi
signal(SIGCHILD, funz); // dove fun contiene la wait
for(;;)
accept....
if(fork()==0)
{
.......gestione servizio
}
--alla term del figlio viene emesso SIGCHILD
qui per sempio cosa succede?....e come mettere la wait nel caso precedente ?
e sopratutto chi mi garantisce che per ogni figlio venga eseguita una wait?
cioe' nel caso in cui piu figli terminano insieme che accadde?....
Grazie in Anticipo della Risposta!
come si implementa un server Concorrente in c? mi spiego meglio, so che si usa la fork per far demandare la gestione di un servizio ad un figlio e rimettere il server in ascolto, ma il mio dubbio sorge nel momento in cui bisogna rilevare la fine del figlio e quindi teoricamente bisogna usare la wait...ma cosi facendo di fatto non perdo la concorrenza?
esempio schema server concorrente:
for(;;)
{
accept....
if(fork()==0)
{
.......gestione servizio
}
wait(); --qui praticamente attendo ogni figlio e allora e' come se fosse sequenziale?
}
se invece faccio cosi
signal(SIGCHILD, funz); // dove fun contiene la wait
for(;;)
accept....
if(fork()==0)
{
.......gestione servizio
}
--alla term del figlio viene emesso SIGCHILD
qui per sempio cosa succede?....e come mettere la wait nel caso precedente ?
e sopratutto chi mi garantisce che per ogni figlio venga eseguita una wait?
cioe' nel caso in cui piu figli terminano insieme che accadde?....
Grazie in Anticipo della Risposta!