que tienen una función de corredor pthread acoplable se define de la siguiente manera:pthread_exit vs volver
void *sumOfProducts(void *param)
{
...
pthread_exit(0);
}
se supone que este hilo para unir el hilo principal.
Cada vez que me encontré con mi programa a través de Valgrind que tendría la siguientes fugas:
LEAK SUMMARY:
definitely lost: 0 bytes in 0 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 968 bytes in 5 blocks
suppressed: 0 bytes in 0 blocks
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 10)
Revisé la página del manual de pthreads que decían:
The new thread terminates in one of the following ways:
* It calls pthread_exit(3), specifying an exit status value that is
available to another thread in the same process that calls
pthread_join(3).
* It returns from start_routine(). This is equivalent to calling
pthread_exit(3) with the value supplied in the return statement.
* It is canceled (see pthread_cancel(3)).
* Any of the threads in the process calls exit(3), or the main thread
performs a return from main(). This causes the termination of all
threads in the process.
milagrosamente, cuando reemplacé la pthread_exit() con una declaración de devolución, , las fugas desaparecieron.
return(NULL);
Mi pregunta real es triple:
- Puede alguien explicar por qué la instrucción de retorno no dio fugas?
- ¿Hay alguna diferencia fundamental entre ambos enunciados, en relación con salir de los hilos?
- En caso afirmativo, ¿cuándo se debe preferir uno sobre el otro?
¿Realmente está usando C++? C++ usa el alcance para destruir objetos y el retorno "saldría" de ese ámbito mientras que pthread_exit no lo hará. –
Lo siento pero nunca menciono C++ en ninguna parte de mi pregunta. Estoy haciendo todo en C a partir de ahora. –
Sé que no lo mencionaste, pero fue una suposición, es por eso que pregunté. :) ¿Podría proporcionarnos una [prueba] completa (http://sscce.org/) [case] (http://www.xs4all.nl/~weegen/eelis/iso-c++/testcase.xhtml)? –