多核心與同步

關於資料競爭(data race),下列說明何者正確?

  1. A多個執行緒只是同時讀取同一個變數的狀態
  2. B一個執行緒對同一個變數連續寫入兩次的狀態
  3. C多個執行緒未經同步就同時存取同一個變數,且至少有一個是寫入的狀態
查看答案與解析

正確答案:C. 多個執行緒未經同步就同時存取同一個變數,且至少有一個是寫入的狀態

資料競爭是指,由於對同一位置的讀寫順序沒有經由同步來決定,使結果隨著執行順序而改變的狀態。因為會依時機點時而發生、時而不發生,所以是在測試中難以發現的缺陷。在C語言與C++中,含有資料競爭的程式其行為被視為未定義。必須以鎖或原子變數來決定順序。

  • A. 只讀取的話值不會改變,所以沒有問題。
  • B. 在單一執行緒內順序是確定的。
  • C. 正確。這會造成結果每次執行都不同。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 以兩個執行緒同時執行上方的程式碼時,counter的最終值有時會小於200000。其原因下列何者正確?
  2. 關於原子指令(不可分割指令),下列說明何者正確?
  3. 關於原子指令CAS(比較並交換,compare-and-swap)的動作,下列何者正確?
  4. 上方的程式碼使用CAS(&p, 預期值, 新值)將共用變數counter變成2倍。CAS失敗而重做迴圈,是在什麼情況下?
  5. 在RISC-V的LR/SC(載入保留/條件式儲存)這類指令組中,SC(條件式儲存)會在什麼情況下失敗?

這個領域的比較