以下程序的输出

时间:2017-05-08 04:28:22

标签: c pthreads pthread-join

当我运行以下程序时,输出为5.
为什么5?为什么不8?

void *doit(void *vargp) {
    int i = 3;
    int *ptr = (int*)vargp;
    (*ptr)++;
}
int main() {
    int i = 0;
    pthread_t tid;
    pthread_create(&tid, NULL, doit, (void*)&i);
    pthread_join(tid,NULL);
    i = i + 4;
    printf("%d",i);
}

2 个答案:

答案 0 :(得分:6)

在doit中,i的值在语句

处从0增加到1
(*ptr)++

线程完成后,将其递增4

i = i + 4;

所以值为5

答案 1 :(得分:2)

doit()中,您将i递增1(通过referance传递的主函数),并在线程加入后向其添加4。

要获得8,您可能已在doit().

中为已传递的参数添加了3而不是仅增加它