这对我来说很令人惊讶。
static int ret = 50;
void * thread_func(void *arg)
{
pthread_exit(&ret);
}
int main(void)
{
pthread_t thr;
int *exit_status;
pthread_create(&thr, NULL, thread_func, NULL);
sleep(2);
pthread_join(thr, (void **)&exit_status);
printf("value of exit status - %d\n", *exit_status);
ret = 20;
pthread_join(thr, (void **)&exit_status);
printf("value of exit status - %d\n", *exit_status);
return 0;
}
输出
value of exit status - 50
value of exit status - 20
我期待exit_status的两次都是线程的实际退出值(在我的情况下为50)。相反,它只是返回我用于pthread_exit的全局变量的值。这不是一个错误吗?
答案 0 :(得分:1)
问:如果您想指定如何获取ret
的当前值,您会返回什么。
A :ret
的地址。
问:你又回来了什么?
A :`ret。
的地址问:那么调用者取消引用它后会得到什么?
A :ret
的当前值。
您可能需要pthread_exit(ret);
- 返回ret
的值,以及调用pthread_join
的代码中的相应更改。