Soy nuevo en C y me gustaría jugar un poco con los hilos. Me gustaría volver algún valor de un hilo usando pthread_exit()
Cómo devolver un valor desde el hilo en C
Mi código es el siguiente:
#include <pthread.h>
#include <stdio.h>
void *myThread()
{
int ret = 42;
pthread_exit(&ret);
}
int main()
{
pthread_t tid;
void *status;
pthread_create(&tid, NULL, myThread, NULL);
pthread_join(tid, &status);
printf("%d\n",*(int*)status);
return 0;
}
Yo esperaría que la salida del programa "42 \ n", pero da salida a un número aleatorio. ¿Cómo puedo imprimir el valor devuelto?
EDIT: Según las primeras respuestas, el problema es que estoy devolviendo el puntero a la variable local. ¿Cuál es la mejor práctica de devolver/almacenar variables de múltiples hilos? Una tabla hash global?
Gracias de antemano
En respuesta a la edición: Me tienden a utilizar una matriz si necesitaba previstas múltiples hilos cada uno con un lugar para escribir sus resultados. Si no sabes de antemano un límite superior en la cantidad de hilos que vas a crear, normalmente lo consideraría un problema. Pero, en general, cualquier estructura está bien siempre y cuando quien inicia el hilo pueda asegurar que haya un lugar para que el hilo almacene su resultado; el hilo se le dice dónde almacenarlo; y quien se una al hilo puede recuperar el resultado y, si es necesario, liberarlo. Si el hilo sale con el mismo valor que se pasó como parámetro, eso puede ayudar. –