Re: [理工] 108交大計系5
※ 引述《waes81224 (changchang)》之銘言:
: 標題: [理工] 108交大計系5
: 時間: Mon Oct 26 00:17:33 2020
:
: 題目如下
: 答案是A
: https://i.imgur.com/KtILUJo.jpg
:
: 1. 想請問這題程式碼中的a是屬於global variable,當child process經由fork行程後,也
: 會共享同一個a。
不是,這個 a 是在 stack 上的 ...
: fork之後接下去執行時,應該會因為parent preocess與child process執
: 行順序的不同而造成a值有不同的可能對吧(race condiction發生)?
這不叫做 race condition,race condition 的定義是不同 thread 卻參照到同一個變數
process fork 後就不同 address space 了,怎麼會有 race condition?
: 2. 我把程式碼拿去執行,卻都是4 3 3 2 2 1這個順序,而沒有上述的情形發生,想請問為
: 什麼呢?
建議加上 sleep,你比較容易觀察到 OS scheduler 作動的情況,
或是你可以 hack 一下 scheduler 驗證所學
建議程式限制在 single core 上執行,也比較好觀察
:
: 這個想法影響到我對於 (a) 跟(b)的選擇,感謝大家。
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.77.140.137 (臺灣)
: ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1603642655.A.FE6.html
: ※ 編輯: waes81224 (119.77.140.137 臺灣), 10/26/2020 00:35:12
: 推 willy3570: fork會copy一份parent的資料給child,因此child有自己 10/26 01:01
: → willy3570: 的一份資料來自於parent的copy,所以變數不是共享的,c 10/26 01:01
怕原 PO 還是沒有懂,現代作業系統並不會一 fork 就馬上 "copy" 一份資料給 child
process,而是直到 child process 嘗試 write memory 時,才會啟動實質上的複製,
這叫做 copy-on-write。
: → willy3570: hild更改a的內容也不會影響到parent。 10/26 01:01
: 感謝大大!!我懂了 variable a 要寫在 main()外面才會有共享變數大問題發生。
不,你沒有懂 ... 。寫在 main 外面的確會變成 global variable,但是不代表 forked
child process 可以用。上面說了,他們 address space 是不一樣的。
試想一下: 你在 bash 上 launch 後的 process 如果可以修改 bash 上任意 memory content
那是多恐怖的問題?
: ※ 編輯: waes81224 (119.77.140.137 臺灣), 10/26/2020 12:35:18
--
◢ ◣ ▁▂█▂▁◢茄你老木! ◥ ▁▂▁
你這個茄子 ◤◥◤◥ 你有得茄嗎? ◢█ ◆ █◣ 【茄~】
◣ ◤ ˋ ˊ ◥ 你有得茄嗎?◢ ◤ ◥◥◤◤ ◥ ◤
◤ ㄧ ◣ ◤ (因為很重要 ▉ ⊙ ⊙ ▏
… ▍ 所以說兩次)▉ △ ◢ ▏
◣ ◤◤ ◣ ◤◢ ψJeans1020 ◢ ◣ ▁▂█▂▁◢茄你老木! ◥ ▁▂▁
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.170.73 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1603803553.A.85B.html
推
10/28 08:40,
3年前
, 1F
10/28 08:40, 1F
推
10/28 11:46,
3年前
, 2F
10/28 11:46, 2F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):