多核心與同步

關於使用CAS的無鎖資料結構中會出現的ABA問題,下列說明何者正確?

  1. AA與B兩個執行緒變得只能交替執行
  2. B當值從A變成B、又變回A時,CAS沒有察覺變化而成功了
  3. C以相反的順序取得A與B兩把鎖
查看答案與解析

正確答案:B. 當值從A變成B、又變回A時,CAS沒有察覺變化而成功了

當鏈結串列開頭的指標為A時,在某個執行緒讀取A並準備CAS的期間,其他執行緒可能移除A、對B進行操作,再放入位址相同的A節點。CAS因為值仍是A而成功,但串列的內容已經改變,結構因而被破壞。可以用在指標上附加更新次數一起比較的方法,或使用LR/SC的方法來防止。

  • A. 這不是執行順序的問題。
  • B. 正確。這是只比較值的CAS之弱點。
  • C. 那是死結的成因。
練習這個領域 前往領域頁面

多核心與同步的其他題目

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

這個領域的比較