Re: [理工] [OS]-關於Fork()

看板Grad-ProbAsk作者 (svanavs)時間16年前 (2009/08/18 21:14), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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)

08/18 23:03, , 1F
我覺得原本的parent process不需要本身再負一次吧?
08/18 23:03, 1F

08/18 23:03, , 2F
只要複製新的child process就好
08/18 23:03, 2F

08/18 23:04, , 3F
另外你的是意思是不是 child process 創造了一個thread
08/18 23:04, 3F

08/18 23:05, , 4F
而這個thread執行了runner 所以value才+了5 反觀parent沒
08/18 23:05, 4F

08/18 23:06, , 5F
有創造 所以才沒+5?
08/18 23:06, 5F

08/18 23:10, , 6F
08/18 23:10, 6F
※ 編輯: svanavs 來自: 60.198.131.51 (08/18 23:11)

08/18 23:55, , 7F
謝謝你!!
08/18 23:55, 7F
文章代碼(AID): #1AYganxD (Grad-ProbAsk)
討論串 (同標題文章)
文章代碼(AID): #1AYganxD (Grad-ProbAsk)