看板 Grad-ProbAsk 關於我們 聯絡資訊
洪兔上課例題: 令C為共享變數,初值 = 5 void main() { int pid; pid =fork(); if(pid == 0){ c = c-1; } else if( pid > 0 ) { c = c+1; } printf("%d\n",c); } 問可能出現的組合: Ans: 45 65 55 66 44 64 46 想請問55 66 44 這三種組合是如何產生的呢? (我沒有來亂5566...) 謝謝:) -- Why Not :-P http://whynot-p.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.40.10
genius945:code有少,if 那邊應該有個c=c-1 ? 11/27 00:14
genius945:只要兩個print都在c+1或c-1的結果傳回c之後執行,就會有 11/27 00:18
genius945:66跟44(假設一開始存取到5),55只要子先做,傳回c,父再做 11/27 00:19
genius945:之後接兩個print 11/27 00:20
genius945:其實這邊我也不是很懂 不知道有沒有說錯QQ 11/27 00:20
genius945:覺得你可以寫個T1T2T3會比較好搞懂,會影響的包含接收到 11/27 00:23
genius945:c的初直,執行運算,運算結果傳回,print, 11/27 00:24
抱歉我補上了>___<"
wheels:樓上正解。 11/27 00:24
wheels:不過這種題目考試的時候寫c是共享變數,也應該要用不共享的 11/27 00:25
wheels:角度看,還滿機車的。 11/27 00:25
※ 編輯: mickeyha 來自: 111.248.40.10 (11/27 01:01)
mickeyha:還是不太懂66跟44耶,,,想確定print不會在assign前執行吧 11/27 01:04
mickeyha:因為在print之前一定會做過其中一個區塊的assign 11/27 01:06
mickeyha:所以我怎麼都橋不出66與44...QQ 11/27 01:06
genius945:c=5+1 ,c=5-1 現在c=4 然後跑兩個print,子跟父可以 11/27 01:11
genius945:concurrent ,我覺得用兩個分開來看比較清楚 11/27 01:11
mickeyha:我懂了 謝謝大家:) 11/27 20:55
sneak: 覺得你可以寫個T1T2 https://daxiv.com 09/11 14:37