|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 11
|
dubbio pthread
ciao a tutti!!!!
ho un dubbio sulla pthread_join.....il fatto è che ho il seguente frammento di codice all'interno del mio programma, che crea N thread, gli fa richiamare una funzione che li blocca tutti fino a quando non sono arrivati tutti gli altri, li sveglia tutti e poi ritorna....solo che non capisco una cosa..nel seguente pezzo di codice (che funziona nell'ambito del programma) c'è solo una pthread_join....in questo caso non dovrebbe attendere un solo thread invece di attenderli tutti??non dovrei fare N pthread_join per tutti i thread, per avere il risultato di aspettarli tutti???o funziona facendone 1 per il fatto che i thread vengono bloccati tutti fino a quando non è arrivato l'ultimo???? Codice:
for(i=0;i<N;i++) pthread_create(&thr,NULL,start_routine,(void *) y); // crea N thread e li manda a start_rountine pthread_join(thr,&ris); // sospende il thread chiamante fino alla terminazione di thr e memorizza il valore di ritorno di thr in ris Ultima modifica di zzzzzz : 13-01-2006 alle 10:34. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5706
|
hai ragione, dovresti chiamare pthread_join una volta per ogni thread ma il tuo codice chiama pthread_create sempre sullo stesso thread.
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Dec 2005
Messaggi: 11
|
e quindi dovrei richiamare pthread_join tante volte quanti sono i thread anche nel caso in cui i thread si blocchino tutti fino all'arrivo dell'ultimo e poi ripartano insieme o, in questo caso, ne basta solo 1 alla fine???
perchè questo mi serve nell'ambito della realizzazione del meccanismo della barriera.... grazie.... ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Per tua informazione pthread_join andrebbe chiamato sempre da qualche parte nel programma; quando un thread termina diviene una sorta di zombie, occupando ancora qualche residua risorsa, fino a quando non fai il join. I thread "detached" si comportano in maniera opposta (liberano immediatamente tutte le risorse all'uscita, ma non puoi effettuare un join su di essi).
A parte questo, pthread_join serve ad essere certi che un certo thread ha ultimato la sua esecuzione (ed eventualmente a prenderne il valore di ritorno). Quindi se il tuo problema è essere certo che tutti i thread hanno finito, bè sì devi eseguire pthread_join per tutti. Altrimenti spiega meglio cosa devi fare che forse mi sfugge qualcosa...
__________________
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:51.