1

这让我很惊讶。

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

4

1 回答 1

1

:如果你想指定如何获取.ret

A : 的地址ret

:返回什么?

A : `ret 的地址。

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

: 的当前值ret

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

于 2014-08-21T03:34:12.430 回答