看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《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