作者svanavs (svanavs)
看板Grad-ProbAsk
标题Re: [理工] [OS]-关於Fork()
时间Tue Aug 18 21:14:23 2009
※ 引述《yesa315 (XD)》之铭言:
: #include<pthread.h>
: #include<stdio.h>
: int value = 0;
: void *runner(void *param); /*the thread*/
: int main(int argc, char *argv[])
: {
: int pid;
: pthread_t tid;
: pthread_attr_t attr;
: pid=fork();
Forking 是把 process 复制一份成为 child
Threading 是共用同一个 process
此题是先 forking 再 threading
所以,
_
/ parent process(P)
P =>
fork--
\_child process(P的复制)=>
threading--threads共用child data
: if(pid == 0) /*child process*/
: {
: pthread_attr_init(&attr);
: pthread_creat(&tid,&attr,runner,NULL);
: pthread_join(tid,NULL);
: printf("CHILD value = %d",value); /*LINE C*/
CHILD value 经过runner运算得 5
: }
: else if(pid > 0)
: {
: wait(NULL);
: printf("PARENT : value = %d",value); /*LINE P*/
PARENT value 原封不动为 0
: }
: }
: void *runner(void *param)
: {
: value = 5;
: pthread_exit(0);
: }
: 求解P行跟C行的value值
: 答案 : P=0 , C=5
: 为什麽?? 能否告诉我程式大概的执行流程
: 感谢
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.198.131.51
※ 编辑: svanavs 来自: 60.198.131.51 (08/18 21:16)
1F:推 yesa315:我觉得原本的parent process不需要本身再负一次吧? 08/18 23:03
2F:→ yesa315:只要复制新的child process就好 08/18 23:03
3F:→ yesa315:另外你的是意思是不是 child process 创造了一个thread 08/18 23:04
4F:→ yesa315:而这个thread执行了runner 所以value才+了5 反观parent没 08/18 23:05
5F:→ yesa315:有创造 所以才没+5? 08/18 23:06
6F:→ svanavs:对 08/18 23:10
※ 编辑: svanavs 来自: 60.198.131.51 (08/18 23:11)
7F:推 yesa315:谢谢你!! 08/18 23:55