c - How is exit status passed between pthread_exit and pthread_join? Is a correction needed in man page? -
question:
how exit status passed between pthread_exit , pthread_join?
int pthread_join(pthread_t thread, void **retval);
if retval not null, pthread_join() copies exit status of target thread (i.e., value target thread supplied pthread_exit(3)) location pointed *retval. if target thread canceled, pthread_canceled placed in *retval.
i think wording in man page incorrect.
it should "if retval not null, pthread_join() copies address of variable holding exit status of target thread (i.e., value target thread supplied pthread_exit(3)) location pointed retval."
i wrote code shows this, see code comments:
#include<stdio.h> #include<stdlib.h> #include<pthread.h> void * function(void*); int main() { pthread_t thread; int arg = 991; int * status; // notice did not intialize status, status *retval pthread_create(&thread, null, function, (void*)(&arg)); pthread_join(thread, (void **)(&status));//passing address of status,&status retval //(2) address same printed in (1) printf("the address of returned status %p,", status); printf("the returned status %d\n", *status); } void * function(void * arg) { int *p; p = (int*)arg; printf("i in thread.\n"); //(1) printing address of variable holding exit status of thread, see (2) printf("the arg address %p %p\n", p, arg); pthread_exit(arg); }
sample o/p:
i in thread.
the arg address 0xbfa64878 0xbfa64878
the address of returned status 0xbfa64878,the returned status 991***
your code doesn't contradict man page.
if retval not null, pthread_join() copies exit status of target thread (i.e., value target thread supplied pthread_exit(3)) location pointed *retval.
you call pthread_join
retval=&status
, it's not null.
you called pthread_exit(0xbfa64878)
exit status of target thread 0xbfa64878
, gets copied *retval
i.e. status = 0xbfa64878
, print out.
i think you're confusing things labels such "address of returned status" , "arg address" ... you're giving labels values pthreads doesn't imply. man page says *retval
gets set value passed pthread_exit
, that's test shows.
in proposed change:
if retval not null, pthread_join() copies address of variable holding exit status of target thread (i.e., value target thread supplied pthread_exit(3)) location pointed retval.
what "the variable holding exit status of target thread"? pthreads defines no such thing. exit status of target thread is value passed pthread_exit
, it's not value of other variable.
Comments
Post a Comment