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

时间:2018-12-16 09:06:56

标签: c multithreading pthreads pthread-join



我已经花了很多时间来分析此问题,但我只能给出一个答案-所打印的进程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.操作系统调度后,它将立即开始执行传递的函数
3. pthread_join将导致调用线程等待,直到新线程完成执行。
4.新线程将打印其进程ID(与主线程不同)。
5. res_t指针将填充“再见”存储位置的起始地址(但不会使用)。
6.在主线程中,getpid()将导致printf打印主线程的PID,这将与新线程的已打印PID不同。
7.程序终止。

有人可以告诉我我错了吗?我正在Eclipse IDE(也是最新版本)上的Windows(最新Windows 10版本)的gcc编译器中运行它。

1 个答案:

答案 0 :(得分:3)

在相同进程上下文中运行的两个线程具有相同的PID。有一些线程实现错误地为每个线程赋予了自己的进程ID,但是这些实现已经十年左右了。