pthread_join和pthread_exit

时间:2014-12-01 14:04:37

标签: c pthreads pthread-join

int pthread_join(pthread_t thread, void **retval);
void pthread_exit(void *retval);

在pthread_exit调用中,我们传递一个指向我们必须传递的值的指针。在pthread_join中,它应该是一个指向指针的指针,根据手册页。我不相信它。当我使用指向char的指针时,我得到了预期的结果。但是,当我使用如下所示的int我得到一个垃圾值。这个实现是正确的吗?

void * sum(void * id)
{
      int n = *(int *)id;
      pthread_exit((void *)&n);
}
void main()
{
      pthread_t t1;
      int *s;
      s = malloc(sizeof(int));
      int num;
      num=5;
      pthread_create(&t1,NULL,sum,(void *)&num);
      pthread_join(t1,(void **)&s);
      printf("returned %d \n",*s);
      pthread_exit(NULL);
}

1 个答案:

答案 0 :(得分:4)

不要从堆栈返回值。来自pthread_exit上的手册页:

The value pointed to by  retval  should  not  be  located  on  the  calling
thread's  stack,  since  the contents of that stack are undefined after the
thread terminates.