看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《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
pathy: 你說的是copy on write 06/15 14:54
chadcoco1222: 所以這樣裡解是錯的嗎???? 06/15 20:17
fightforlive: child和parent基本不會共用變數,除非你用共用記憶 06/16 08:03
fightforlive: 體才會使用相同變數 06/16 08:03
chadcoco1222: 所以是兩個獨立的process嗎 06/16 10:38
chadcoco1222: os%5D-fork()-%E5%92%8C-vfork()-%5Bcopy-on-write% 06/16 11:38
chadcoco1222: 5D 06/16 11:38
pathy: c大說的是基本thread,f大說的是copy on write 06/16 11:58
pathy: 更正, c大內文說的是copy, f大推文說的是基本thread 06/16 12:01