作者chadcoco1222 (ha)
看板Grad-ProbAsk
標題Re: [理工] [OS] 父子process的共享變數
時間Mon Jun 15 12:41:32 2015
※ 引述《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