作者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)
推 yesa315:我覺得原本的parent process不需要本身再負一次吧? 08/18 23:03
→ yesa315:只要複製新的child process就好 08/18 23:03
→ yesa315:另外你的是意思是不是 child process 創造了一個thread 08/18 23:04
→ yesa315:而這個thread執行了runner 所以value才+了5 反觀parent沒 08/18 23:05
→ yesa315:有創造 所以才沒+5? 08/18 23:06
→ svanavs:對 08/18 23:10
※ 編輯: svanavs 來自: 60.198.131.51 (08/18 23:11)
推 yesa315:謝謝你!! 08/18 23:55