Подтвердить что ты не робот

Почему start_routine для pthread_create возвращает void * и принимает void *

Заголовок функции для pthread_create выглядит следующим образом:

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

Я понимаю все это, за исключением того, что указатель функции для start_routine имеет вид void* (*fpointer) (void*), что означает, что он принимает указатель void и возвращает указатель void.

Указатель void, который он принимает, - это просто способ передать аргумент start_routine, я получаю эту часть, но я не понимаю, почему функция возвращает указатель на void? Какой код даже заметил бы указатель void?

4b9b3361

Ответ 1

Из документации для pthread_create:

Создается поток, запускающий start_routine с аргументом arg в качестве единственного аргумента. Если start_routine возвращается, эффект будет таким, как если бы был неявный вызов pthread_exit(), используя возвращаемое значение start_routine в качестве статуса выхода. Обратите внимание, что поток, из которого первоначально был вызван main(), отличается от этого. Когда он возвращается из main(), эффект выглядит так, как если бы был неявный вызов exit(), используя возвращаемое значение main() в качестве статуса выхода.

И pthread_exit:

Функция pthread_exit() завершает вызывающий поток и делает значение value_ptr доступным для любого успешного соединения с завершающим потоком.

Итак, если вы выполняете pthread_join в потоке, возвращаемый указатель возвращается обратно к потоку соединения, позволяя вам передавать информацию из умирающей нити в другую, живой поток.

Ответ 2

Из spec:

Если возвращается start_routine, эффект, как если бы был неявный вызовите pthread_exit(), используя возвращаемое значение start_routine как статус выхода.