Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-10-2002, 11:56   #41
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]
...sicuro?
Ehm...
ma ++x non preincrementa e x++ postincrementa? Perche' fanno la stessa cosa mettendoci ++x o x++ ?
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2002, 12:01   #42
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Codice:
int x1 = 1;
int x2 = 1;
++x1;
x2++;
printf("x1: %d x2: %d\n", x1, x2);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2002, 12:03   #43
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Codice:
int x1 = 1;
int x2 = 1;
int y1;
int y2;
y1 = ++x1;
y2 = x2++;
printf("y1: %d y2: %d\n", y1, y2);
Succo: nella for, utilizzo forse il valore restituito da ++x all'atto dell'incremento? No.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2002, 16:03   #44
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]
Codice:
int x1 = 1;
int x2 = 1;
int y1;
int y2;
y1 = ++x1;
y2 = x2++;
printf("y1: %d y2: %d\n", y1, y2);
Succo: nella for, utilizzo forse il valore restituito da ++x all'atto dell'incremento? No.
Ok ma prova questo

int x1=0;
int x2=0;
printf("%d %d",++x1,x2++);

probabilmente il for usa quella regola sempre alla fine del ciclo ed e' un caso speciale, pero' ++x e' diverso da x++!!!
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2002, 16:07   #45
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
printf("%d %d",++x1,x2++);
Stai passando alla printf il risultato di ++x/x++. Nel terzo argomento della for invece esegui una operazione, che può essere qualsiasi, senza preoccuparti di un eventuale risultato.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2002, 16:11   #46
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Guarda ad es. che puoi fare nel terzo argomento della for:
Codice:
int main() {
int x;
char a[64];
for(x=0; x<5; (
  sprintf(a, "%d", x++),
  fclose(fopen(a, "w"))
));
return 0;
}
Come vedi, la for se ne frega altamente di quello che succede lì dentro
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 11:38   #47
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Una conferma: se io uso l'array di semafori, pero' 2 processi possono chiedere la mutuaesclusione contemporaneamente su 2 semafori diversi, io non posso usare la stessa variaibile di appoggio buf, senno' c'e' conflitto...giusto?
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 11:46   #48
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Sì la puoi usare, a meno che qualche sem* non la modifichi.
Nota che bloccare due diversi semafori di seguito è un BUG che prima o poi ti porta al deadlock.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 11:53   #49
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]Sì la puoi usare, a meno che qualche sem* non la modifichi.
Nota che bloccare due diversi semafori di seguito è un BUG che prima o poi ti porta al deadlock.
Gia' perche' ogni figlio si fa una copia delle variabili, quindi quelle che usa non sono in comune.
Perche' e' un bug? Se io ho un array di semafori, dove ad ogni semaforo corrisponde una risorsa differente che deadlock puo' portare?

ciao
Cimmo
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 11:57   #50
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Perche' e' un bug? Se io ho un array di semafori, dove ad ogni semaforo corrisponde una risorsa differente che deadlock puo' portare?
Caso più semplice: prendi due processi A, B e due semafori 1, 2:
Codice:
A: lock semaforo 1 (ok)
 B: lock semaforo 2 (ok)
A: lock semaforo 2 (in attesa)
 B: lock semaforo 1 (in attesa)
=> deadlock
Potresti usare la semop per effettuare i DUE lock contemporaneamente in maniera atomica, ma la bomba è sempre innescata - se riesci a tenere solo un lock alla volta è meglio.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 12:01   #51
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Si ma ogni processo da me non prende la mutuaesclusione di piu' di 1 semaforo alla volta, per prenderne un secondo deve prima rilasciare la prima risorsa...c'e' qualche controindicazione?
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 12:04   #52
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Cimmo
[b]Si ma ogni processo da me non prende la mutuaesclusione di piu' di 1 semaforo alla volta, per prenderne un secondo deve prima rilasciare la prima risorsa...c'e' qualche controindicazione?
Allora ok, avevo capito il contrario.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 21:57   #53
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Urgente: ma io non posso aprire piu' di un listening socket per processo? Perche' io faccio mettere piu' di un processo in ascolto di connect tcp, ma dopo che il primo si e' messo in ascolto, dal secondo processo in poi la bind mi restituisce: Err: 98 "Address already in use"

Se dovesse essere cosi', io come faccio ad avere una ricezione contemporanea di dati?
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2002, 22:31   #54
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Chiaro che la bind non ti permette di stare in ascolto sulla stessa porta...
Ci sono diversi modi...

1)
Sul processo padre :
socket
bind
listen
accept

Appena ricevi una connessione fai la fork...ad a quel punto sul figlio gestisci il socket ricevuto dalla accept...mentre nel padre ritorni sulla accept...

Se non hai problemi di prestazioni (creare un nuovo processo con la fork è molto peso) va benissimo...

2) Produttore-consumatore (prefork)
Fai N fork per i consumatori (N figli)...
I figli restano in attesa su una coda che arrivi una connessione da gestire...
Hai un produttore (processo padre) che sta in attesa di ricevere connessioni sulla accept...
Appena ne riceve una mette il socket nella coda...e ritorna in attesa di una connessione...
Il primo processo figlio che viene sbloccato si prende il socket e gestisce la connessione...

Per gestire la coda devi usare 2 semafori e una mutua esclusione...

N è il numero di figli...
Si inizializza SemA a N, SemB a 0...

Immissione :

Lock(SemA)
Lock(mutex)
immetto in coda
Unlock(mutex)
Unlock(SemB)

Prelievo :

Lock(SemB)
Lock(mutex)
immetto in coda
Unlock(mutex)
Unlock(SemA)

3) thread...anche in Linux ci dovrebbero essere i thread (pthread)
Usandoli puoi benissimo recuperare un bel po' di prestazioni sul primo metodo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2002, 08:10   #55
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
creare un nuovo processo con la fork è molto peso
Se la creazione del nuovo processo prevede un execve o simili, è molto meglio usare una vfork.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2002, 08:30   #56
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da ilsensine
[b]
Se la creazione del nuovo processo prevede un execve o simili, è molto meglio usare una vfork.
vfork che fa ? Non duplica la memoria del processo padre ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2002, 08:42   #57
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Fork è implementata con fork, vfork è implementata con clone.
Non esiste una definizione rigorosa della vfork; sotto linux evita la copia completa della page table del processo padre, in quanto è studiata appositamente per essere lanciata prima di un exec (che sovrascriverebbe comunque la page table).
Nota che su Linux anche la fork non è molto pesante: viene duplicata la page table tra padre e figlio, ma non le pagine di memoria fisica. Le pagine di memoria vengono duplicate nel momento in cui uno dei due tenta una scrittura. Ciò è molto efficiente e comporta:
- miglior gestione della memoria (le pagine che verranno solo lette non vengono duplicate)
- minor latenza della fork
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 15:28   #58
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]
La memoria sopravvive all'uscita del programma, e se hai provato l'esempio che ho postato sulla shm capirai perchè.
Puoi renderlo "autodistruggente" quando il conteggio degli accessi è 0 usando il comando IPC_RMID con la shmctl (v. man).
Quindi per liberare la memoria al termine del programma mi basta fare cosi':
shmctl(id,IPC_RMID,??);
Come terzo parametro che ci devo mettere?

Anche i semafori rimangono in memoria? O si autoeliminano al termine del programma?

Thanx...

P.S.= Sto facendo un software niente male...
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 15:47   #59
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Quindi per liberare la memoria al termine del programma mi basta fare cosi':
shmctl(id,IPC_RMID,??);
Come terzo parametro che ci devo mettere?
Non è specificato, ma credo che sia ignorato, quindi dovrebbe poter essere NULL.

Quote:
Anche i semafori rimangono in memoria? O si autoeliminano al termine del programma?
Come per la shm, possono essere distrutti con la semctl(.., 0, IPC_RMID)
Controlla la pagina man per vedere cosa succede quando rimuovi un set di semafori.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 16:29   #60
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]
Non è specificato, ma credo che sia ignorato, quindi dovrebbe poter essere NULL.


Come per la shm, possono essere distrutti con la semctl(.., 0, IPC_RMID)
Controlla la pagina man per vedere cosa succede quando rimuovi un set di semafori.
La semctl dice che il secondo parametro viene ignorato, quindi dovrebbe eliminare con un solo comando anche un array di semafori come ho io nel mio caso, giusto?

Altra domanda:
ho usato il metodo strnlen di string.h e in fase di compilazione mi da' questo warning: host.c: In function `main': host.c:436: warning: implicit declaration of function `strnlen'
in teoria non dovrebbe essere un errore che appare quando non includi il file header? Eppure ho incluso un file .h che a sua volta include string.h quindi non capisco perche' non lo trova...
Cimmo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Elgato Embrace: una sedia ergonomica pro...
Brad Pitt torna in pista: F1 – Il Film a...
Hitachi Vantara annuncia la sua AI Facto...
Brembo passa all'alluminio riciclato al ...
HONOR pronta a sfidare gli iPad Pro con ...
OpenAI esce allo scoperto: confermati i ...
In arrivo altri due prodotti da Apple en...
Il tool per aggiornare da Windows 10 a W...
Rishi Sunak entra in Microsoft e Anthrop...
Porsche in poche ore chiude la formazion...
iPhone 17 disponibili su Amazon al prezz...
La Ferrari Elettrica non è la cau...
Ricarica da record: Zeekr supera i 1.300...
Un 'capezzolo' con feedback aptico al po...
Porsche Taycan Rush a Misano: prima al v...
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: 22:14.


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