我已经花了很多时间来分析此问题,但我只能给出一个答案-所打印的进程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编译器中运行它。
答案 0 :(得分:3)
在相同进程上下文中运行的两个线程具有相同的PID。有一些线程实现错误地为每个线程赋予了自己的进程ID,但是这些实现已经十年左右了。