4. 在多執行緒程式中,如果兩個執行緒只讀取同一個變數(沒 有寫入),那麼這個變數就不會造成任何 race condition。
(A)O
(B)X
答案:登入後查看
統計: A(15), B(3), C(0), D(0), E(0) #3678220
統計: 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 x → 5
Thread B: write x = 7
Thread A: use x → 5 (但其實 x 已經被改成 7)
這就是典型 race condition。
【不會造成 race condition 的組合】
| Thread 1 | Thread 2 | Race? |
|---|---|---|
| read | read | ✘ 不會 |
| read | write | ✔ 會 |
| write | write | ✔ 會 |
一句話:
只有 read-read 組合不會競爭。
【記憶技巧】
一句話:
race condition = 有寫入才會打架;大家只讀不會吵架。
【常見錯誤】
-
以為同時讀取也算 race → 錯
-
把「resource contention(資源競爭)」和「race condition」搞混
-
以為多執行緒一定有 race → 不一定
0
0