Necesito pasar múltiples argumentos a una función que me gustaría llamar en un hilo separado. Tengo read que la forma típica de hacer esto es definir una estructura, pasar la función un puntero a eso y desreferenciarlo para los argumentos. Sin embargo, no soy capaz de conseguir que esto funcione:Múltiples argumentos a la función llamados por pthread_create()?
#include <stdio.h>
#include <pthread.h>
struct arg_struct {
int arg1;
int arg2;
};
void *print_the_arguments(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)args;
printf("%d\n", args -> arg1);
printf("%d\n", args -> arg2);
pthread_exit(NULL);
return NULL;
}
int main()
{
pthread_t some_thread;
struct arg_struct args;
args.arg1 = 5;
args.arg2 = 7;
if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {
printf("Uh-oh!\n");
return -1;
}
return pthread_join(some_thread, NULL); /* Wait until thread is finished */
}
La salida de este debe ser:
5
7
Pero cuando lo ejecuto De hecho, me sale:
141921115
-1947974263
Alguien sabe ¿Qué estoy haciendo mal?
probar su asignación en el montón? –
@ Carson ¿Por qué debería marcar la diferencia? – sigjuice
Tu estructura debe vivir al menos tanto como tu hilo. Si está creando un hilo y regresando de la función que llamó a pthread_create(), la estructura asignada en la pila puede sobrescribirse por otros datos y podría causar problemas en su función de hilo. En este ejemplo, eso no es un problema, ya que el subproceso de creación espera a que se complete el subproceso de trabajo antes de volver. –