Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-07-2010, 13:36   #1
monelli
Senior Member
 
L'Avatar di monelli
 
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
[C] Fork, programmazione concorrente domande

Non sò se posso postare qua o aprire un thread in programmazione...
Cmq mi servirebbe capire se il mio ragionamento è corretto o se sbaglio qualcosa....

Ho questo:

for(i=2 ; i>=1 && !fork() ; i--) printf( "%d\n" , i );

Cosa fà??? !fork() vuol dire fork==0...

Allora...

Sono il padre i=2 creo un figlio A con i=2 non stampo niente i=1
A stampa 2 esegue i-- quindi i=1
Sono il padre i=1 creo un figlio B con i=1 non stampo niente i=0
A i=1 crea un figlio C i=1 non stampa niente i=0 FINE
B stampa 1 esegue i-- quindi i=0 FINE
C stampa 1 esegue i-- quindi i=0 FINE

Quindi in conclusione stampo 2 1 1 giusto??? Ma cisto che sono in concorrenza potre anche stampare 1 2 1 ???

PS l'ho appena eseguito e stampa 2 1 Perchè???

PID Padre 8315
PID Figlio 8316 ------> Padre 8315
2
PID Figlio 8317 ------> Padre 8316
1

In pratica il padre cre un figlio che stampa 2 questo a sua volta crea un figlio che stampa 1... Perchè???
__________________
Dont drink and drive but smoke and fly
Peugeot 206 enfant terrible!!!

Ultima modifica di monelli : 16-07-2010 alle 14:10.
monelli è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:06   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
non ho capito perché stampa 2 se i parte da 1.. comunque fork al padre ritorna il pid del figlio, quindi un numero > 0 ed esce dal for.. non può stampare più di una volta se la fork riesce
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:10   #3
monelli
Senior Member
 
L'Avatar di monelli
 
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
Ops scusa ho appena modificato... i parte da 2... Però non lo capisco lo stesso!
__________________
Dont drink and drive but smoke and fly
Peugeot 206 enfant terrible!!!
monelli è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:22   #4
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da monelli Guarda i messaggi
Sono il padre i=2 creo un figlio A con i=2 non stampo niente i=1
A stampa 2 esegue i-- quindi i=1
Sono il padre i=1 creo un figlio B con i=1 non stampo niente i=0
A i=1 crea un figlio C i=1 non stampa niente i=0 FINE
B stampa 1 esegue i-- quindi i=0 FINE
C stampa 1 esegue i-- quindi i=0 FINE
Quando il padre crea il primo figlio la fork gli ritorna il pid del figlio

quindi la condizione

i >= 1 && !fork() è falsa perché fork() > 0
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:33   #5
monelli
Senior Member
 
L'Avatar di monelli
 
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
Quando il padre crea il primo figlio la fork gli ritorna il pid del figlio

quindi la condizione

i >= 1 && !fork() è falsa perché fork() > 0
Ok e fin lì ci sono... però il resto??? Facendolo girare stampa:
2
1

??????
__________________
Dont drink and drive but smoke and fly
Peugeot 206 enfant terrible!!!

Ultima modifica di monelli : 16-07-2010 alle 14:37.
monelli è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:37   #6
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da monelli Guarda i messaggi
Ok e fin lì ci sono... però il resto???
Il padre entra nel for, crea il figlio, la condizione è falsa ed esce dal for senza stampare

Il primo figlio dopo essere creato ha fork() = 0, quindi la condizione del for è vera, stampa 2 e decrementa i

Il primo figlio fa la stessa cosa del proprio parent, quindi non stampa niene ma genera un figlio

Il secondo figlio stampa 1 e decrementa

Ora i è zero e il secondo figlio neanche esegue la fork
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:40   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Riecco il tuo problema.
La risposta corretta è: il programma stampa "1" o non stampa un bel niente.

Riscrivi il ciclo con un while:
Codice:
#include <unistd.h>
#include <stdio.h>

int main()
{
	int i = 1;

	while ((i >= 1) && (fork() == 0)) {
		printf("%d\n", i);
		i = (i - 1);
	}
	return 0;
}
Intanto, come avete già notato, si parte da 1 anziché da 2.
Ci sono due possibilità:
  1. la prima fork() fallisce
  2. la prima fork() non fallisce

Nel primo caso, fork() != 0, per cui la condizione viene falsificata e il ciclo mai eseguito.
Nel secondo caso, fork() != 0 ma il figlio viene creato con i = 1, per cui la condizione viene falsificata nel padre e il ciclo eseguito solo dal figlio che stampa "1". Il figlio poi decrementerà la variabile i e farà fallire sempre il successivo controllo: per questo, il ciclo viene eseguito al più una volta.

ciao

EDIT: ops, ho letto solo ora, se si parte da i = 2 il risultato è ovviamente diverso.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 16-07-2010 alle 14:45.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:44   #8
monelli
Senior Member
 
L'Avatar di monelli
 
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
azz scusa avevo sbagliato a scrivere prima... i è inizializzato a 2!!!

Adesso comunque mi guardo il tuo esempio... e se hai tempo mi puoi fare anche una spiegazione con 2??? grazie!
__________________
Dont drink and drive but smoke and fly
Peugeot 206 enfant terrible!!!
monelli è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:52   #9
monelli
Senior Member
 
L'Avatar di monelli
 
Iscritto dal: Feb 2007
Città: Imperia "S.S.28"
Messaggi: 905
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
Il padre entra nel for, crea il figlio, la condizione è falsa ed esce dal for senza stampare

Il primo figlio dopo essere creato ha fork() = 0, quindi la condizione del for è vera, stampa 2 e decrementa i

Il primo figlio fa la stessa cosa del proprio parent, quindi non stampa niene ma genera un figlio

Il secondo figlio stampa 1 e decrementa

Ora i è zero e il secondo figlio neanche esegue la fork
Ok è ciò che mi sfuggiva... Sbagliavo il funzionamento del for... Ero convinto che il padre facesse due fork, una per i=2 e una per i=1 invece NO!!!!!

Grazie
__________________
Dont drink and drive but smoke and fly
Peugeot 206 enfant terrible!!!
monelli è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2010, 14:59   #10
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Esattamente, ogni fork() con esito positivo fa fallire la condizione, per cui stampi tutti i numeri da 2 ad 1 (se tu cambiassi l'indice di partenza, sarebbe da n ad 1), o ti fermi alla prima fork() che fallisce.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2011, 21:30   #11
Jin2011
Junior Member
 
Iscritto dal: Jul 2011
Messaggi: 1
Ciao a tutti!

qualcuno potrebbe aiutarmi a risolvere un programma in programm concorrente pe rla scuola? Grazie
Jin2011 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2011, 23:12   #12
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
posta una domanda e qualcuno ti risponderà :v
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2011, 19:33   #13
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
Quanto è brutta la fork... ogni volta che la vedo mi accorgo di quanto fa cacare il suo comportamento
WarDuck è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
Ryzen 7 5800X3D pronto a tornare sul mer...
NASA: l'amministrazione Trump prosegue s...
L'Iran avrebbe acquistato un satellite p...
VivaTech compie dieci anni e raddoppia p...
Le vendite di CPU si sono ridotte di 25 ...
Starship: SpaceX ha completato lo static...
Huawei FusionSolar Roadshow 2026: l'inno...
Nuovo trailer per Street Fighter: un fil...
Sovranità sui dati: arriva la pri...
Schede video NVIDIA e AMD di nuovo su Ma...
Robot aspirapolvere, TV OLED, iPhone 17 ...
EUREKA J15 Pro Ultra super interessante ...
Intel porta l'AI nei notebook entry-leve...
6000 mAh, 5G e 108MP a meno di 200€: ecc...
FRITZ!Mesh Set 2700: Wi-Fi 7 in tutta la...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v