pthread_join 为什么在这个代码里面不 block?

2021-02-01 14:41:17 +08:00
 movq
#include <stdio.h>
#include <pthread.h>

void* thread(void *v) {
    printf("The thread starts now\n");
    //pthread_exit(NULL);
}

int main() {
    int tid1;
    int retValue = 0;
    pthread_create(&tid1, NULL,thread, NULL);

    retValue = pthread_join(tid1, NULL);
    printf("Thread ID: %d, return value: %d\n",tid1, retValue);

    retValue = pthread_join(tid1, NULL);
    printf("Thread ID: %d, return value: %d\n",tid1, retValue);
    return 0;
}

输出结果(某些时候)是:

Thread ID: 1877241856, return value: 3
Thread ID: 1877241856, return value: 3
The thread starts now

Process finished with exit code 0

有几个疑问:

  1. 按理来说pthread_join先 block,等到thread执行完,再执行下面的语句,为什么这里不等thread执行完就继续执行了?

  2. 为什么pthread_join返回的是 3 而不是 0 ?按照定义,返回值是 0 表示正常 join

792 次点击
所在节点    程序员
2 条回复
movq
2021-02-01 15:19:04 +08:00
解决了,tid1 应该设置成 pthread_t 而不是 int
crclz
2021-02-01 15:30:09 +08:00
所以说不要漏掉 warning

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/750299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX