PDA

View Full Version : [C] Multithread


Mistre
29-03-2006, 18:15
Ciao a tutti!!!
Ho iniziato veramente da poco a programmare i thread( qualche giorno ).
Il problema e' questo:
devo passare un numero da linea di comando e creare N thread che saranno inizializzati tutti con la stessa funzione. Finita la loro creazione devo mandarli in esecuzione.
Dovrei poter distinguere un thread da l'altro in quanto devo farli dialogare tra di loro, ho scritto questo codice:

code:

pthread_t tid;

for( int i = 0; i < N; i++ )
{
pthread_create( &tid, NULL, &init, (void*) i );
}

pthread_join( tid, &status );



Ho scritto solo la parte interessante e che non funziona.
Come posso fare per risolvere il problema?

Grazie!!

k0nt3
29-03-2006, 20:23
così a occhio non puoi fare il cast di "i" a (void *).. prova a farlo con "&i"

ps. però stai attento che i è una variabile locale.. non so che fine fa quando esce dal ciclo ;)

sottovento
30-03-2006, 07:15
Ciao,
l'osservazione di k0nt3 e' corretta, ma quel parametro e' quello dell'utente.
Domanda: lo usi?
Seconda domanda: hai riferito che non funziona. Puoi dare piu' spiegazioni? Non funziona perche' non si compila? Oppure si compila ma poi non parte? Oppure parte ma non crea i thread? Oppure resta bloccato?
Terza (e ultima) domanda: ti serve eseguire la pthread_join() solo sull'ultimo thread creato?

High Flying
Sottovento

Riordian
30-03-2006, 08:42
for( int i = 0; i < N; i++ )



Sono un po' arruginito con il C quindi potrei dire una ca...ta però mi sembra che una dichiarazione di i così non si può fare (al contrario del c++)

dovrebbe essere:

int i = 0;

for(i=0....)
{
}

Ciao
Se mi ricordo male salta la mia risposta :)

fedo
30-03-2006, 09:34
ricordi bene... ma a volte dipende dal compilatore..

nella maggior parte dei casi è come dici tu... la dichiarazione và in testa al corpo funzione (o del blocco)..

ciao

Riordian
30-03-2006, 09:42
ricordi bene... ma a volte dipende dal compilatore..

nella maggior parte dei casi è come dici tu... la dichiarazione và in testa al corpo funzione (o del blocco)..

ciao

Si il dubbio del compilatore è venuto anche a me,
però questa di mettere le dichiarazioni in testa al blocco è una regola del C quindi penso che un compilatore c non debba permettere di fare una cosa del genere,
infatti il dubbio che ho è che lui compili con un compilatore c++ un codice c.
Cosa, a mio avviso, non bella ;)