Probablemente esté creando la estructura en el mismo ámbito que pthread_create. Esta estructura ya no será válida una vez que se abandone el alcance.
Intente crear un puntero a la estructura en el montón y pase ese puntero de estructura a su hilo. No olvides borrar ese recuerdo en algún lugar (en el hilo si nunca volverás a usarlo, o cuando ya no lo necesites).
Además, como se mencionó en cyberconte, si va a acceder a esa información desde diferentes subprocesos, deberá bloquear el acceso a ella con una exclusión mutua o sección crítica.
Editar 14 de mayo de 2009 a las 12:19 pm EST: Además, como han mencionado otras personas, debe convertir su parámetro al tipo correcto.
Si estás pasando una variable que es una estructura global (que usted parece estar insistiendo en), su función del hilo tendrá que echar al tipo:
void my_thread_func(void* arg){
my_struct foo = *((my_struct*)(arg)); /* Cast the void* to our struct type */
/* Access foo.a, foo.b, foo.c, etc. here */
}
O, si estás de paso una Puntero a su estructura:
void my_thread_func(void* arg){
my_struct* foo = (my_struct*)arg; /* Cast the void* to our struct type */
/* Access foo->a, foo->b, foo->c, etc. here */
}
En realidad, creé el hilo en la función principal y creé la estructura justo después de incluir los archivos de encabezado. Entonces debe ser accesible para todas las funciones (corrígeme si estoy equivocado). – skinderneath
Su edición reciente fue la publicación más útil aquí hasta ahora. Gracias. – skinderneath
Gracias, esto me salvó el tocino. – g33kz0r