Re: [理工] [OS] 父子process的共享變數
※ 引述《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
06/15 14:54, 1F
→
06/15 20:17, , 2F
06/15 20:17, 2F
→
06/16 08:03, , 3F
06/16 08:03, 3F
→
06/16 08:03, , 4F
06/16 08:03, 4F
→
06/16 10:38, , 5F
06/16 10:38, 5F
→
06/16 11:38, , 6F
06/16 11:38, 6F
→
06/16 11:38, , 7F
06/16 11:38, 7F
→
06/16 11:38, , 8F
06/16 11:38, 8F
推
06/16 11:58, , 9F
06/16 11:58, 9F
推
06/16 12:01, , 10F
06/16 12:01, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):