我试图运行下面的代码。在这个question的帮助下,我能够理解应该创建多少个进程和线程,但是,为了让这个更进一步,我尝试让线程执行一个函数。执行线程 - 输出原因
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *runner(void *param) {
int i = atoi(param);
printf("My thread id is %ld\n",pthread_self());
printf("\nValue of parameter = %d", i);
pthread_exit(0);
}
int main()
{
int i = 5;
pid_t pid;
pthread_t tid;
pthread_attr_t attr;
pid = fork(); wait(NULL);
if (pid == 0) { /* Child Process */
fork(); wait(NULL);
pthread_attr_init(&attr);
i++;
pthread_create(&tid, &attr, runner, &i);
pthread_join(tid, NULL);
}
fork(); wait(NULL);
printf("\n\n");
return 0;
}
这种情况的输出是: 我的线程id是139919964464896
Value参数= 0
Value参数= 0
我的线程id是139919964464896
参数值= 0
Value参数= 0
这里,我无法弄清楚:
- 为什么行我的线程ID为139919964464896得到,而线值参数= 0获取打印打印两次四次。
- 为什么当传递的参数初始化为5并增加到6时,该值会打印为0?
请问,有人可以帮助我吗?提前致谢!
我刚开始阅读操作系统,这是很多有用的信息。非常感谢解释! :) – Neha
不客气! –