什麼是資料競爭(Data race)

多個執行緒未經同步就同時存取同一變數,且至少有一個是寫入的狀態。結果每次執行都可能不同。在 C 語言與 C++ 中屬於未定義行為。

日文名稱: データ競合

「資料競爭(Data race)」出現在3領域的6道練習題中(多核心與同步, 嵌入式與韌體, 效能評估與效能剖析等)。

這個名詞所屬的領域: 多核心與同步

練習資料競爭(Data race)的題目

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

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

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

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

解析中的「資料競爭(Data race)」

出現「資料競爭(Data race)」的題目(6題)

  1. 關於資料競爭(data race),下列說明何者正確?
  2. 以兩個執行緒同時執行上方的程式碼時,counter的最終值有時會小於200000。其原因下列何者正確?
  3. 關於RISC-V的amoadd.w指令或x86的lock xadd指令這類取得並相加(fetch-and-add)指令的動作,下列何者正確?
  4. 關於臨界區段(critical section),下列說明何者正確?
  5. 在RTOS中,從讀取感測器的工作傳遞資料給負責顯示的工作時,使用佇列(訊息佇列)的優點,下列何者正確?
  6. 因為加入了測量效能的機制,而使想測量的程式本身的行為改變,這種現象稱為什麼?

相關名詞

更新(Refresh) 臨界區段(Critical section) RTOS(即時作業系統) 效能計數器(Performance counter) 互斥鎖(Mutex) 比較並交換(Compare-and-swap) 目錄式一致性(Directory-based coherence) 交易式記憶體(Transactional memory) 死結(Deadlock) 自旋鎖(Spinlock)

前往名詞解釋列表