The function header for pthread_create
looks like this:
int pthread_create(pthread_t * thread,
const pthread_attr_t * attr,
void * (*start_routine)(void *),
void *arg);
I understand it all except that the function pointer for start_routine
is of the form void* (*fpointer) (void*)
which means it takes in a void*
and returns a void*
.
The void*
parameter is just a way to pass in an argument to the start_routine
, I get that part, but I don't understand why the function returns a void*
? What code will even notice that return value?
From the documentation for pthread_create
:
The thread is created executing
start_routine
witharg
as its sole argument. If thestart_routine
returns, the effect is as if there was an implicit call topthread_exit()
using the return value ofstart_routine
as the exit status. Note that the thread in whichmain()
was originally invoked differs from this. When it returns frommain()
, the effect is as if there was an implicit call toexit()
using the return value ofmain()
as the exit status.
And pthread_exit
:
The
pthread_exit()
function terminates the calling thread and makes the valuevalue_ptr
available to any successfuljoin
with the terminating thread.
So if you do a pthread_join
on a thread, the pointer it returns is passed back to the joining thread, allowing you to transmit information from the dying thread to another, living thread.