Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
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


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...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Intel potrebbe estendere la vita del soc...
Windows, gli aggiornamenti di aprile for...
Addio cavi perimetrali: il robot tosaerb...
Google Pixel 10 oggi proposto a soli 549...
I robot di Boston Dynamics possono inter...
Tech, gadget e accessori a meno di 5€ su...
Ford riorganizza la divisione elettrica:...
Elon Musk trasforma xAI in fornitore di ...
Pirateria musicale: batosta record per A...
iRobot riparte: nuova era con Picea, Roo...
Bitcoin: Killing Satoshi, film sul miste...
Haier Mini LED 4K da 65 pollici a soli 5...
Windows, come nascondere tutte le finest...
Meta 'svuota' la startup di Mira Murati:...
Nuvacore: gli ex Nuvia e Qualcomm rilanc...
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: 10:46.


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