Creazioni processi contemporanei C

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Dclaudio1990
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 624
Iscrizione: sabato 11 aprile 2015, 14:31
Distribuzione: openSUSE
Sesso: Maschile
Località: Roma

Creazioni processi contemporanei C

Messaggio da Dclaudio1990 »

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 :ciao:
"Io penso, dunque sono, ossia esisto."
-René Descartes
Avatar utente
SuperStep
Entusiasta Emergente
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

Messaggio da SuperStep »

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:

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
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:

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();
    }
    
}
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.
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)
Avatar utente
Dclaudio1990
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 624
Iscrizione: sabato 11 aprile 2015, 14:31
Distribuzione: openSUSE
Sesso: Maschile
Località: Roma

Re: Creazioni processi contemporanei C

Messaggio da Dclaudio1990 »

Ciao , lavorano in parellelo?
"Io penso, dunque sono, ossia esisto."
-René Descartes
Avatar utente
SuperStep
Entusiasta Emergente
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

Messaggio da SuperStep »

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)
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: Creazioni processi contemporanei C

Messaggio da vbextreme »

forse, e se hai almeno due core......
Easy framework per il linguaggio C.
vbextreme hack your life
Avatar utente
SuperStep
Entusiasta Emergente
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

Messaggio da SuperStep »

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)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Creazioni processi contemporanei C

Messaggio da Zoff »

Estendo le risposte date dagli altri.
Dipende cosa intendi per "in parallelo".
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
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti