4. 在多執行緒程式中,如果兩個執行緒只讀取同一個變數(沒 有寫入),那麼這個變數就不會造成任何 race condition。
(A)O
(B)X

答案:登入後查看
統計: A(15), B(3), C(0), D(0), E(0) #3678220

詳解 (共 1 筆)

#7210640

【解題思路】

這題考你對「race condition(競爭狀況)」的真正定義是否理解。

race condition 發生的條件很簡單:

至少有一個執行緒會寫入(write),且有其他執行緒同時讀或寫同一個記憶體。

也就是:

  • read + write

  • write + write

才可能有 race condition。

read + read 不會產生 race condition

因為大家都只是看資料,沒有誰會改資料 → 沒有競爭。

題目說:

兩個執行緒「只讀取」同一變數(沒有寫入)

→ 這種情況 確實不會構成 race condition

因此敘述是 正確的(O)

【逐一破題】

(A) O
→ 正確
→ 只有「讀取」不會產生競爭,因為沒有任何人修改資料。

(B) X
→ 表示認為會產生競爭 → 錯誤
→ 只有在有「寫入」的情況才會競爭。

【延伸知識】

【什麼是 race condition?】

情況如下:

兩個以上的執行緒同時:

  • 存取相同變數

  • 至少一個在修改資料

這樣就可能出現:

  • 資料不一致

  • 結果不穩定

  • 執行結果每次不同

  • 記憶體狀態被覆蓋

例如:

ㅤㅤ
Thread A: read x5 Thread B: write x = 7 Thread A: use x5 (但其實 x 已經被改成 7

這就是典型 race condition。

【不會造成 race condition 的組合】

Thread 1 Thread 2 Race?
read read ✘ 不會
read write ✔ 會
write write ✔ 會

一句話:

只有 read-read 組合不會競爭。

【記憶技巧】

一句話:

race condition = 有寫入才會打架;大家只讀不會吵架。

【常見錯誤】

  1. 以為同時讀取也算 race → 錯

  2. 把「resource contention(資源競爭)」和「race condition」搞混

  3. 以為多執行緒一定有 race → 不一定

0
0