多核心與同步
關於資料競爭(data race),下列說明何者正確?
- A多個執行緒只是同時讀取同一個變數的狀態
- B一個執行緒對同一個變數連續寫入兩次的狀態
- C多個執行緒未經同步就同時存取同一個變數,且至少有一個是寫入的狀態
查看答案與解析
正確答案:C. 多個執行緒未經同步就同時存取同一個變數,且至少有一個是寫入的狀態
資料競爭是指,由於對同一位置的讀寫順序沒有經由同步來決定,使結果隨著執行順序而改變的狀態。因為會依時機點時而發生、時而不發生,所以是在測試中難以發現的缺陷。在C語言與C++中,含有資料競爭的程式其行為被視為未定義。必須以鎖或原子變數來決定順序。
- A. 只讀取的話值不會改變,所以沒有問題。
- B. 在單一執行緒內順序是確定的。
- C. 正確。這會造成結果每次執行都不同。