Re: [理工] [OS] 父子process的共享變數

看板Grad-ProbAsk作者 (ha)時間9年前 (2015/06/15 12:41), 編輯推噓3(307)
留言10則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《gn00399745 (Michael)》之銘言: : int value = 0; : void *runner(void *param); : int main(in argc, char *argv[]) : { : int pid; : phread_t tid; : pthread_arrt_t attr; : pid = fork() : if(pid == 0){//child : pthread_attr_init(&attr); : pthread_create(&tid,&attr,runner,NULL); : pthread_join(tid,NULL); : printf("%d\n",value); //line C : }else if(pid>0){ //parent : wait(NULL); : printf("%d\n",value);//line P : } : } : void *runner(void *param) : { : value = 5; : pthread_exit(0); : } : -------------------------------------------------- : 這題答案line C是5 : line P是0 : 請問有可能出現line P=5的答案嗎? : fork()以後應該是把value的值複製一份到子process的記憶體位置吧? : 所以子process不管如何更改自己的value值應該都無法影響父process的 : value 我這樣的觀念是正確的嗎? 我的理解是當子要去修改value這個共享變數的值時, os才會複製一份出來給子去做修改, 如果沒有要修改只有讀取的話,父與子使用的value是同一個的(同記憶體位置) ,不知是否理解錯誤?需要各位幫忙!謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.100.146 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1434343293.A.71C.html

06/15 14:54, , 1F
你說的是copy on write
06/15 14:54, 1F

06/15 20:17, , 2F
所以這樣裡解是錯的嗎????
06/15 20:17, 2F

06/16 08:03, , 3F
child和parent基本不會共用變數,除非你用共用記憶
06/16 08:03, 3F

06/16 08:03, , 4F
體才會使用相同變數
06/16 08:03, 4F

06/16 10:38, , 5F
所以是兩個獨立的process嗎
06/16 10:38, 5F

06/16 11:38, , 7F
os%5D-fork()-%E5%92%8C-vfork()-%5Bcopy-on-write%
06/16 11:38, 7F

06/16 11:38, , 8F
5D
06/16 11:38, 8F

06/16 11:58, , 9F
c大說的是基本thread,f大說的是copy on write
06/16 11:58, 9F

06/16 12:01, , 10F
更正, c大內文說的是copy, f大推文說的是基本thread
06/16 12:01, 10F
文章代碼(AID): #1LVbTzSS (Grad-ProbAsk)
文章代碼(AID): #1LVbTzSS (Grad-ProbAsk)