多核心與同步

在RISC-V的LR/SC(載入保留/條件式儲存)這類指令組中,SC(條件式儲存)會在什麼情況下失敗?

  1. A以SC寫入的值與以LR讀取的值相同時
  2. B從LR讀取到SC之間,其他核心寫入該位址等,使保留失效時
  3. CLR與SC之間只要執行了任何一個其他指令時
查看答案與解析

正確答案:B. 從LR讀取到SC之間,其他核心寫入該位址等,使保留失效時

LR在讀取值的同時,會「保留」該位址。之後以SC寫入時,若保留仍然有效就寫入並成功;若因其他核心的寫入等使保留失效,則不寫入並回傳失敗。相對於CAS檢查值是否一致,LR/SC檢查的是有無寫入,因此即使值曾改變又變回原樣,也能偵測到。ARM也有同樣的指令組。

  • A. 即使寫入相同的值也會成功。
  • B. 正確。檢查的不是值,而是有無寫入。
  • C. 若是簡短的處理,之間可以放入其他指令。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 關於使用CAS的無鎖資料結構中會出現的ABA問題,下列說明何者正確?
  2. 關於RISC-V的amoadd.w指令或x86的lock xadd指令這類取得並相加(fetch-and-add)指令的動作,下列何者正確?
  3. 關於自旋鎖(spinlock),下列說明何者正確?
  4. 下列何者是最不適合使用自旋鎖的情境?
  5. 在自旋鎖中,不直接用原子指令去改寫鎖的變數,而是平時以一般的讀取等待鎖被釋放,只有看到鎖空出來時才使用原子指令(test-and-test-and-set),其理由下列何者正確?

這個領域的比較