PDA

View Full Version : [C] Segmentation fault di pthread_join


osa
10-05-2007, 18:21
Salve sto usando la libreria pthread.
Creo N thread e salvo ID dei thread in un vettore tid[N], dopo faccio:
for(i=0; i<= numthr; i++)
rc=pthread_join(tid[i],(void **)&status);
per attendere tutti i thread, inspiegabilmente per certe dimensioni di N mi da segmentation faul la funzione pthread_join. Perche?

maulattu
10-05-2007, 19:22
Salve sto usando la libreria pthread.
Creo N thread e salvo ID dei thread in un vettore tid[N], dopo faccio:
for(i=0; i<= numthr; i++)
rc=pthread_join(tid[i],(void **)&status);
per attendere tutti i thread, inspiegabilmente per certe dimensioni di N mi da segmentation faul la funzione pthread_join. Perche?

la condizione del for presumo debba essere i < numthr e non "<="
partendo da 0 e usando <=, conti numthr+1 e non numthr ;)

osa
11-05-2007, 10:06
Scusa ho sbagliato a copiare, la condizione che ho messo e < .
La cosa strana è se faccio
for(i=1; i<= numthr,i++)
non mi da errore. Pazzesco. L'id del primo thread io l''ho salvato in tid[0].
Qualcuno sa dirmi qualcosa???

maulattu
11-05-2007, 19:07
Scusa ho sbagliato a copiare, la condizione che ho messo e < .
La cosa strana è se faccio
for(i=1; i<= numthr,i++)
non mi da errore. Pazzesco. L'id del primo thread io l''ho salvato in tid[0].
Qualcuno sa dirmi qualcosa???


status di che tipo è?
guarda qui: http://publib.boulder.ibm.com/iseries/v5r1/ic2924/info/apis/users_25.htm

si dichiara
void *status

e poi lo si passa alla pthread_join come
pthread_join(..., &status);
if (status != NULL)
{
...
}

osa
12-05-2007, 14:06
Ho messo status di tipo void, ho messo NULL al posto di status, ma il problema persiste è una cosa stranissima

maulattu
13-05-2007, 08:48
Ho messo status di tipo void, ho messo NULL al posto di status, ma il problema persiste è una cosa stranissima

mmmhhh....:help:
a questo punto posta la parte di codice con cui crei i thread

maulattu
13-05-2007, 08:49
mi da segmentation faul la funzione pthread_join. Perche?

ora che mi viene in mente... ma lo hai verificato con gdb?