referencia que pthread_join pthread_create pthread_attr_t procesos hilos hace ejercicios definir c posix pthreads

pthread_create - pthread_join que hace



¿Por qué start_routine para pthread_create devuelve void*y toma void* (2)

El encabezado de la función para pthread_create ve así:

int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void * (*start_routine)(void *), void *arg);

Lo entiendo todo, excepto que el puntero de la función para start_routine tiene el formato void* (*fpointer) (void*) que significa que toma un puntero void y devuelve un puntero void .

El puntero de vacío que toma es solo una forma de pasar un argumento a la start_routine, obtengo esa parte, pero no entiendo por qué la función devuelve un puntero de vacío. ¿Qué código notará ese puntero nulo?


De la pthread_create :

Si la start_routine regresa, el efecto es como si hubiera una llamada implícita a pthread_exit() usando el valor de retorno de start_routine como el estado de salida.


De la documentación para pthread_create :

El hilo se crea ejecutando start_routine con arg como único argumento. Si la start_routine regresa, el efecto es como si hubiera una llamada implícita a pthread_exit () usando el valor de retorno de start_routine como el estado de salida. Tenga en cuenta que el hilo en el que se invocó main () difiere de este. Cuando regresa de main (), el efecto es como si hubiera una llamada implícita a exit () utilizando el valor de retorno de main () como estado de salida.

Y pthread_exit :

La función pthread_exit () termina el subproceso de llamada y hace que el valor value_ptr esté disponible para cualquier unión exitosa con el subproceso de terminación.

Entonces, si haces un pthread_join en un hilo, el puntero que devuelve se pasa de nuevo al hilo de unión, lo que te permite transmitir información del hilo moribundo a otro hilo vivo.