Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
La flessibilità di configurazione è il punto di forza di questo 2-in-1, che ripropone in un form factor alternativo tutta la tipica qualità dei prodotti Lenovo della famiglia ThinkPad. Qualità costruttiva ai vertici, ottima dotazione hardware ma costo che si presenta molto elevato.
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
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


Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
AMD Ryzen AI Max+: ora anche gli LLM da ...
ChatGPT diventa tutor, addio risposte fa...
Cooler Master MasterFrame 600: modularit...
Questi case sembrano GPU RTX 50 e costan...
Elgato Facecam 4K: ecco la nuova webcam ...
Stampa 3D senza sprechi e senza rifiuti?...
OPPO Find X9 Pro potrebbe battere ogni r...
Le nuove Sony WH-1000XM6 ora disponibili...
ChatGPT Agent come un essere umano: l'AI...
Samsung rivaluta la fabbrica per il pack...
'La potenza di 16 core, nel palmo della ...
Windows 10 compie 10 anni, ma il cambiam...
Un altro Pixel 6a ha preso fuoco: la pro...
NVIDIA, ritorno in Cina in grande stile?...
Tutti contro Windows Recall: un altro se...
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: 05:28.


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