Creazioni processi contemporanei C
- Dclaudio1990
- Scoppiettante Seguace

- Messaggi: 624
- Iscrizione: sabato 11 aprile 2015, 14:31
- Distribuzione: openSUSE
- Sesso: Maschile
- Località: Roma
Creazioni processi contemporanei C
Salve sto sviluppando per studiare una applicazioni di messagistica instantanea in C , visto che normalmente un applicazione di questo tipo invia e riceve messaggi nello stesso tempo, quindi ho pensato di fare una semplice chiamata fork() che creai i processi , ma visto che un processo usa il while , l'altro processo entra in esecuzione o no? Se il secondo processo non viene messo in esecuzione come posso fare per fare due processi che riescono ad andare in esecuzioni entrambi? Spero di essermi spiegato , grazie in anticipo 
"Io penso, dunque sono, ossia esisto."
-René Descartes
-René Descartes
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: Creazioni processi contemporanei C
quando si utilizza la funzione fork(), che ritorna due volte (una nel padre ed una nel figlio), si utilizza il valore di ritorno della fork (che nel padre vale il pid del figlio e nel figlio vale 0, un valore minore di zero indica che c'e' stato un problema nel crare il figlio) per determinare cosa fare, in pseudocodice equivale a:
quando si scrive un programma che si divide in piu' processi si tende ad utilizzare una strutturazione del codice piu' articolata di un programma a singolo processo. Ad esempio, in un programma OOP, si e' soliti creare un oggetto che diventa il controllore dei task del figlio (sia per i processi, ma anche per i thread).
quindi in c risulta una cosa del genere:
una cosa del genere dovrebbe funzionare discretamente (l'ho scritta adesso, potrebbe esserci qualche errore, ma in linea di massima funziona).
sul gapil : http://gapil.gnulinux.it/files/2011/12/gapil.pdf
si trovano informazioni molto dettagliate riguardo ai processi, soprattutto (pagina 49) al capitolo "3.1.2 Una panoramica sulle funzioni fondamentali" ci dovrebbero essere un po' di informazioni molto utili per il tuo problema.
Codice: Seleziona tutto
inizio:
valore = fork()
se valore maggiore di zero: goto inizio
se valore uguale a zero: procedura figlio
se valore minore di zero: comunica errore; goto inizio
quindi in c risulta una cosa del genere:
Codice: Seleziona tutto
while(true){
father_procedure_wait();
pid_t pid = fork();
if(pid == 0)
{
// sono il figlio
child_procedure();
}
else if(pid < 0)
{
// padre
father_procedure_error();
}
}
sul gapil : http://gapil.gnulinux.it/files/2011/12/gapil.pdf
si trovano informazioni molto dettagliate riguardo ai processi, soprattutto (pagina 49) al capitolo "3.1.2 Una panoramica sulle funzioni fondamentali" ci dovrebbero essere un po' di informazioni molto utili per il tuo problema.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
- Dclaudio1990
- Scoppiettante Seguace

- Messaggi: 624
- Iscrizione: sabato 11 aprile 2015, 14:31
- Distribuzione: openSUSE
- Sesso: Maschile
- Località: Roma
Re: Creazioni processi contemporanei C
Ciao , lavorano in parellelo?
"Io penso, dunque sono, ossia esisto."
-René Descartes
-René Descartes
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: Creazioni processi contemporanei C
si
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
- vbextreme
- Entusiasta Emergente

- Messaggi: 1214
- Iscrizione: domenica 12 gennaio 2014, 14:06
- Desktop: lxde
- Distribuzione: xubuntu 14.10
Re: Creazioni processi contemporanei C
forse, e se hai almeno due core......
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: Creazioni processi contemporanei C
quello era scontato, altrimenti vengono alternati dal gestore processi.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Re: Creazioni processi contemporanei C
Estendo le risposte date dagli altri.
Nel senso comune di parallelismo, cioé quello per cui si intende che nello stesso istante vengono eseguite le istruzioni in entrambi i processi, questo è vero con le condizioni imposte da vbextreme.
Se invece intendi semplicemente che l'esecuzione di un processo non aspetta necessariamente la terminazione del precedente questo è altrettanto vero indipendentemente dal numero di processori.
In realtà, richiede anche l'esistenza di uno scheduler nel sistema operativo, ma questo è presente in tutti i sistemi operativi general purpose.
Nel caso di un singolo processore semplicemente si alterna il lavoro dei due processi. Il tempo di esecuzione rimane piu' o meno quello dell'esecuzione in serie (cioè T1+T2) però non sai esattamente quando nel tempo viene eseguito l'uno o l'altro.
Dipende cosa intendi per "in parallelo".Dclaudio1990 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4751961#p4751961][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ciao , lavorano in parellelo?
Nel senso comune di parallelismo, cioé quello per cui si intende che nello stesso istante vengono eseguite le istruzioni in entrambi i processi, questo è vero con le condizioni imposte da vbextreme.
Se invece intendi semplicemente che l'esecuzione di un processo non aspetta necessariamente la terminazione del precedente questo è altrettanto vero indipendentemente dal numero di processori.
In realtà, richiede anche l'esistenza di uno scheduler nel sistema operativo, ma questo è presente in tutti i sistemi operativi general purpose.
Nel caso di un singolo processore semplicemente si alterna il lavoro dei due processi. Il tempo di esecuzione rimane piu' o meno quello dell'esecuzione in serie (cioè T1+T2) però non sai esattamente quando nel tempo viene eseguito l'uno o l'altro.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti
