Por qué start routine for pthread crea return void* y toma void*


El encabezado de la función para pthread_create se 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 función para start_routine es de la forma void* (*fpointer) (void*)lo que significa que toma un puntero vacíoy devuelve un puntero vacío.

El puntero void 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 void? ¿Qué código notará ese puntero vacío?

Author: Vilhelm Gray, 2009-08-30

2 answers

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 devuelto de start_routine como el estado de salida. Tenga en cuenta que el hilo en el que main() fue invocado originalmente difiere de esto. Cuando retorna desde main (), el efecto es como si hubiera una llamada implícita a exit () usando el valor devuelto de main() como el estado de salida.

Y pthread_exit:

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

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

 28
Author: bcat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-29 21:44:22

De la especificación :

Si el start_routine devuelve, el efecto es como si hubiera un implícito llamar a pthread_exit() usando el valor devuelto de start_routine como el estado de salida.

 7
Author: Martin v. Löwis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-29 21:37:45