C 代码:有人可以解释为什么在此示例中打印的进程 ID 相同吗?

C Code: Can somebody explain why process ID printed is the same in this example?



我已经尝试了很长时间来分析这个问题,但我只能得出一个答案——打印的进程 ID 会有所不同。但 gcc 正在打印相同的值。谁能解释为什么会这样?
请找到以下示例:

#include<stdio.h>
#include<pthread.h>

void *fun_t(void *arg)
{
    printf("%d\n",getpid());
    pthread_exit("Bye");
}

int main()
{
    pthread_t pt;
    void *res_t;
    if(pthread_create(&pt,NULL,fun_t,NULL) != 0)
        perror("pthread_create");
    if(pthread_join(pt,&res_t) != 0)
        perror("pthread_join");
    printf("%d\n",getpid());
return 0;
}


这是我的理解:
1. 将创建具有某些进程 ID 的新线程。
2. 一旦 OS 安排它
它就会开始执行传递的函数 3. pthread_join 将导致调用线程等待,直到新线程完成执行。
4. 新线程将打印其进程ID(与主线程不同)。
5. res_t 指针将填充 "Bye" 存储位置的起始地址(但不会被使用)。
6. 在主线程中,getpid()会导致printf打印主线程的PID,与新线程已经打印的PID不同。
7. 程序终止。

有人可以告诉我哪里错了吗?我是 运行 在 eclipse IDE(也是最新版本)上的 windows(win 10 最新版本)的 gcc 编译器中。

同一进程上下文中 运行 的两个线程具有相同的 PID。线程的实现错误地为每个线程提供了自己的进程 ID,但这些实现已经过时了大约十年。