<分区>
我已经尝试了很长时间来分析这个问题,但我只能得出一个答案——打印的进程 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 指针将填充为存储“Bye”的起始地址(但不会被使用)。
6. 在主线程中,getpid()会导致printf打印主线程的PID,这与新线程已经打印的PID不同。
7. 程序终止。
有人可以告诉我哪里错了吗?我在 eclipse IDE(也是最新版本)上的 Windows(win 10 最新版本)的 gcc 编译器中运行它。