PDA

Visualizza la versione completa : [C] Sincronizzazione processi


jobv
08-06-2010, 18:06
Salve a tutti!

Stò cercando di risolvere un problema di sincronizzazione tra due processi. In versione semplificata potrei dire che quello che vorrei è che un processo padre creasse un figlio e che:

1) il figlio invia un segnale al padre che lo riceve e stampa sul terminale qualcosa (in realtà dovrebbe fare altro ma già se riesce a far questo è un passo in avanti!)
2) dopo aver stampato il suo messaggio il padre invia un segnale al figlio il quale lo riceve e stampa sul terminale qualcosa
3) vanno avanti così fino a quando il figlio non termina (banalmente ho messo una exit nel while ma è per semplificare le cose)

il codice che ho scritto è questo:


#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<signal.h>

void padre(int);
void figlio(int);

int main(int argc, char *argv[])
{
int pid;
signal(SIGUSR1,padre);
pid=fork();
if(pid==0)
{
signal(SIGUSR2,figlio);
kill(getppid(),SIGUSR1);
pause();
while(1)
{
kill(getppid(),SIGUSR1);
pause();
exit(0);
}
}
else
{
pause();
while(kill(pid,0)!=-1)
{
kill(pid,SIGUSR2);

pause();
}
exit(0);
}
}

void padre(int signo)
{
printf("Padre\n");
}

void figlio(int signo)
{
printf("Figlio\n");
}


ma naturalmente non va...scusate forse la banalità!

frankitt
08-06-2010, 22:03
Purtroppo sono mesi che non tocco questi argomenti, ma ti posso dire quasi con certezza che sbagli delle cose concettuali. Quando si utilizzano i segnali allora devi utilizzare delle funzioni di sistema che ti permettano di gestirle. Una funzione per la gestione dei segnali mi pare si chiami sigaction.
Ti do' un link di un tizio che ha creato una guida bellissima sull' utilizzo delle system call su unix.
http://gapil.truelite.it/

jobv
09-06-2010, 12:40
Ti ringrazio per la risposta e per il link!

Sembra essere veramente una bella guida! :D

Anch'io ero arrivato a conclusioni del genere ma pensavo che poteva esserci qualche altro modo visto che si tratta di un esercizio per l'università e che quindi dovrei risolvere (secondo me almeno) in base a ciò che il prof ha spiegato :madai!?:

frankitt
09-06-2010, 13:46
Il ragazzo più bravo che conosco a programmare non ha appreso nulla dall' uni, ma da solo. l' università ti da delle basi concettuali, ti aiuta a ragionare, ma per il resto ti assicuro non ti da nulla di più, purtroppo. e te lo dice uno che fa informatica...!!!
Ora segui quella guida che è fatta molto bene.

Loading