什麼是資料競爭(Data race)
多個執行緒未經同步就同時存取同一變數,且至少有一個是寫入的狀態。結果每次執行都可能不同。在 C 語言與 C++ 中屬於未定義行為。
日文名稱: データ競合
「資料競爭(Data race)」出現在3領域的6道練習題中(多核心與同步, 嵌入式與韌體, 效能評估與效能剖析等)。
這個名詞所屬的領域: 多核心與同步
多個執行緒未經同步就同時存取同一變數,且至少有一個是寫入的狀態。結果每次執行都可能不同。在 C 語言與 C++ 中屬於未定義行為。
日文名稱: データ競合
「資料競爭(Data race)」出現在3領域的6道練習題中(多核心與同步, 嵌入式與韌體, 效能評估與效能剖析等)。
這個名詞所屬的領域: 多核心與同步
正確答案:C. 多個執行緒未經同步就同時存取同一個變數,且至少有一個是寫入的狀態
資料競爭是指,由於對同一位置的讀寫順序沒有經由同步來決定,使結果隨著執行順序而改變的狀態。因為會依時機點時而發生、時而不發生,所以是在測試中難以發現的缺陷。在C語言與C++中,含有資料競爭的程式其行為被視為未定義。必須以鎖或原子變數來決定順序。
資料競爭是指,由於對同一位置的讀寫順序沒有經由同步來決定,使結果隨著執行順序而改變的狀態。
關於資料競爭(data race),下列說明何者正確?這是資料競爭的典型例子。
以兩個執行緒同時執行上方的程式碼時,counter的最終值有時會小於200000。其原因下列何者正確?取得並相加將讀取、加法、寫入作為單一不可分割的操作執行,所以只用一個指令就能解決counter++的資料競爭。
關於RISC-V的amoadd.w指令或x86的lock xadd指令這類取得並相加(fetch-and-add)指令…若多個執行緒同時執行讀取並改寫共用變數的部分,就會發生資料競爭。
關於臨界區段(critical section),下列說明何者正確?若以共用變數與旗標傳遞資料,就需要設法防止資料競爭,以及接收端反覆去檢查的負擔。
在RTOS中,從讀取感測器的工作傳遞資料給負責顯示的工作時,使用佇列(訊息佇列)的優點,下列何者正確?更新(Refresh) 臨界區段(Critical section) RTOS(即時作業系統) 效能計數器(Performance counter) 互斥鎖(Mutex) 比較並交換(Compare-and-swap) 目錄式一致性(Directory-based coherence) 交易式記憶體(Transactional memory) 死結(Deadlock) 自旋鎖(Spinlock)