Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-11-2007, 21:42   #41
Gnappy
Member
 
Iscritto dal: Feb 2001
Città: Nelle Langhe, dove non c'è tecnologia ma solo buon vino
Messaggi: 154
Quote:
Originariamente inviato da cionci Guarda i messaggi
Non ho capito questo esempio:
SIMULAZIONE POSSIBILE:
1) creazione ilnostrothread_1.
2) inizio computazione ilnostrothread_1, int x = 0, sleep, context switch.
3) creazione ilnostrothread_2.
4) inizio computazione ilnostrothread_2, int x = 0, sleep, context switch.
5) creazione ilnostrothread_3.
6) inizio computazione ilnostrothread_3, int x = 0, sleep, context switch.
7) proseguimento computazione ilnostrothread_1, x++, x = 1, "1", pthread_exit.
8) proseguimento computazione ilnostrothread_1, x++, x = 2, "2", pthread_exit.
9) proseguimento computazione ilnostrothread_1, x++, x = 3, "3", pthread_exit.

Questo è quello che volete ottenere o quello che NON volete si ottenga ?
L'output in questo caso è ovviamente 1, 1, 1
Questo è quello che otteniamo e che NON vogliamo si ottenga.

Comunque l'output è scritto e si ottiene "1", "2", "3", magari fosse "ovviamente 1, 1, 1"...

Agli altri 2 reply rispondo domani che ora sono proprio fuso. Grazie a tutti dell'aiuto che ci state dando
__________________
spammo un casino!
Gnappy è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2007, 21:51   #42
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
Allora avete un'implementazione fallata dei pthread...non c'è altra spiegazione:
Codice:
#include <stdio.h>
#include <pthread.h>


void *miothread(void * arg)
{
  int x = 0;
  sleep(1);
  printf("%d\n", ++x);
  pthread_exit(0);
}

int main()
{
  pthread_t t;
  pthread_create(&t, NULL, miothread, NULL);
  pthread_create(&t, NULL, miothread, NULL);
  pthread_create(&t, NULL, miothread, NULL);
  sleep(2);
  return 0; 
}
~$ gcc -lpthread prova.c -o prova
~$ ./prova
1
1
1
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2007, 21:52   #43
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
Su che piattaforma siete ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2007, 22:20   #44
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
In ogni caso l'esempio senza inizializzazione non è stato solo fuorviante, ma proprio non corretto in quanto il problema di base è diverso.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 11:46   #45
airon
Senior Member
 
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
Ma scusate avete provato a verificare che indirizzi fisici prendono le variabili??

Io son dell'idea di qualche errore nel codice...non me ne vogliate eh

Ultima modifica di airon : 07-11-2007 alle 12:00.
airon è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 17:47   #46
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da cionci Guarda i messaggi
In ogni caso l'esempio senza inizializzazione non è stato solo fuorviante, ma proprio non corretto in quanto il problema di base è diverso.
[OT]

Non c'entra un tubo , ma sto ascoltando Spirit Crusher .... RIP per l'avatar

[/OT]

Comunque anche a me da il risultato corretto sul codice che hai postato.

A sto punto non ho capito se è DAVVERO necessario o no che ogni thread abbia la sua variabile "pthread_t" o meno. Magari il fatto che così funziona è solo dato dal caso che tutti i thread finiscano prima che quello successivo venga spawnato .

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 18:04   #47
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
Che io sappia non è necessario...
[OT] [/OT]

Ultima modifica di cionci : 07-11-2007 alle 18:06.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 18:06   #48
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da cionci Guarda i messaggi
Che io sappia non è necessario...
Il fatto è che su tutti gli esempi che ho trovato viene usata una variabile per OGNI thread lanciato, tipo qua : http://www.llnl.gov/computing/tutorials/pthreads/
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 20:06   #49
airon
Senior Member
 
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Il fatto è che su tutti gli esempi che ho trovato viene usata una variabile per OGNI thread lanciato, tipo qua : http://www.llnl.gov/computing/tutorials/pthreads/
Che io sappia, come Cionci, non è necessario che ogni thread abbia la sua variabile. Alla fine si utilizzano vettori o simili giusto per controllare meglio i thread tramite id ma nulla di piu'.
Ogni thread avrà in ogni caso il suo id e, come da teoria che ci sta sotto, le proprie variabili, stack, file ecc.

Io ho provato a creare diversi tipi di thread, giusto per farli sovrapporre, e non ho riscontato problemi.
airon è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 20:16   #50
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
Imho è solo un riferimento. Ovviamente se devi usare il join il riferimento ti serve, se non lo usi il riferimento lo puoi tranquillamente lasciar perdere
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 20:34   #51
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Allora a sto punto diventa fondamentale sapere che implementazione dei pthread stanno usando e su che SO, perchè rimane l'unica cosa da incolpare

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2007, 20:42   #52
dnarod
Senior Member
 
L'Avatar di dnarod
 
Iscritto dal: Nov 2002
Messaggi: 4329
solaris 10...


abbiamo "risolto", nel senso che mallochiamo anche il piu piccolo spillo e inizializziamo qualsiasi cosa ogni volta che si deve usare...ora sono usciti altri problemi ancora piu stronzi e impensabili, ma per il cercheremo di fixare da soli...nonappena mi accorgero di non farcela, se trovero il modo di formularlo in italiano comprensbile, provero a postare...

...il succo del problema che abbiamo esposto finora era che allocando un nuovo thread dopo che l altro era morto (e non reinizializzando le variabili), questo si trovava a pescare gli indirizzi -anche- delle variabili locali del thread precedente che ovviamente hanno un loro valore...brutto, si, antipatico anche, ma non del tutto incredibile, ne sbagliato tra l altro...è solo la politica seguita sal so e siam stati piciu noi a non inizializzare tutto ogni volta...
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga|
|ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck|
dnarod è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2007, 12:35   #53
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
[OT]

Non c'entra un tubo , ma sto ascoltando Spirit Crusher .... RIP per l'avatar

[/OT]

Comunque anche a me da il risultato corretto sul codice che hai postato.

A sto punto non ho capito se è DAVVERO necessario o no che ogni thread abbia la sua variabile "pthread_t" o meno. Magari il fatto che così funziona è solo dato dal caso che tutti i thread finiscano prima che quello successivo venga spawnato .

Ciao
Diciamo di si'. Perche' il thread figlio quando finisce diventa uno zombie finche' non ci fai la join per recuperare il risultati, per cui ti rimane occupata tutta la memoria relativa a quel thread. In alcuni casi potrebbe trattarsi di parecchia roba.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2007, 12:50   #54
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Gnappy Guarda i messaggi
Si, diciamo che mi sono spiegato male, lo so che viene inizializzata random nel range dell'int, però in questo caso abbiamo fatto una comunissima prova ed al primo passaggio i++ printa "1", quindi si, dipende dal compilatore ma questo poco ci interessa.
Se, ad esempio, la inizializzassimo OGNI volta a 0, esempio:
Codice:
void* ilnostrothread() {
  [...]
  int x = 0;
  x++;
  printf("%d\n", x);
  [...]
  pthread_exit(NULL);
}
Ad ogni chiamata di questo thread avremo sempre printato "1". Quindi, senza ragionarci su, potremmo dire che per risolvere il problema iniziale basterebbe inizializzare a 0/NULL tutte le variabili di cui faremo uso all'interno del thread.
Questo si, andrebbe bene nel caso in cui lanciassimo solo un thread dello "stesso tipo"( pthread_create(&T, NULL, ilnostrothread, NULL); ) alla volta aspettando la sua terminazione con il pthread_join nel main oppure con un mutex che tenga lockato il thread in tutta la sua computazione. Così abbiamo già appurato che funziona, però viene a mancare tutta la parte concorrenziale del progetto.
Finalmente sono riuscito a spiegare il problema? Scusami ma spiegarlo è più difficile di quel che sembra..
Francamente, dopo aver letto il thread almeno tre volte, devo ancora capire se volete che questi thread condividano o no il contenuto di quelle variabili. .
Se non devono farlo niente di piu' semplice: le inizializzate ed ogni thread avra' il valore iniziale previsto. Ovviamente se non inizializzate può essere che un nuovo thread riutilizzi la memoria del precedente per cui vedete i valori precedenti, ma questo e' un caso fortuito dovuto al fatto che c'è un errore nel codice (variabile non inizializzata).
Se dovete scambiare valori tra variabili non potete usare variabili locali ai thread. Dichiarate la variabile fuori dal thread e la passate come argomento durante la pthread_create. Ad esempio
Codice:

void *miothread(void * arg)
{
  int& x = * static_cast<int*>(arg);
  sleep(1);
  printf("%d\n", ++x);
  pthread_exit(0);
}

int main()
{
  volatile int x = 0;
  pthread_t t1;
  pthread_t t2;
  pthread_create( &t1, NULL, miothread, (void*)&x );
  pthread_create( &t2, NULL, miothread, (void*)&x );
  pthread_join(t1, NULL);
  pthread_join(t2, NULL);
}
A scanso di equivoci ripero: del fatto che vengano ripescati i vecchi indirizzi tra un thread e l'altro non ve ne deve fregare niente, ve ne accorgete solo se non inizializzate le variabili e quello e' un errore di programmazione.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele

Ultima modifica di marco.r : 08-11-2007 alle 12:58. Motivo: corretto il codice
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Il rover NASA Perseverance ha ''raccolto...
NASA e ISRO hanno lanciato il satellite ...
Switch 2 ha venduto 5,82 milioni di cons...
Assassin's Creed Black Flag Remake: le m...
Cosa ci fa una Xiaomi SU7 Ultra alle por...
Promo AliExpress Choice Day: prezzi stra...
Nostalgico, ma moderno: il nuovo THEC64 ...
AVM avvia la distribuzione di FRITZ! OS ...
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:54.


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