pthread_exit返回值

时间:2014-08-21 03:31:55

标签: linux multithreading pthreads pthread-join

这对我来说很令人惊讶。

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的全局变量的值。这不是一个错误吗?

1 个答案:

答案 0 :(得分:1)

:如果您想指定如何获取ret当前值,您会返回什么。

A ret的地址。

:你又回来了什么?

A :`ret。

的地址

:那么调用者取消引用它后会得到什么?

A ret的当前值。

您可能需要pthread_exit(ret); - 返回ret,以及调用pthread_join的代码中的相应更改。