多核心與同步
關於使用CAS的無鎖資料結構中會出現的ABA問題,下列說明何者正確?
- AA與B兩個執行緒變得只能交替執行
- B當值從A變成B、又變回A時,CAS沒有察覺變化而成功了
- C以相反的順序取得A與B兩把鎖
查看答案與解析
正確答案:B. 當值從A變成B、又變回A時,CAS沒有察覺變化而成功了
當鏈結串列開頭的指標為A時,在某個執行緒讀取A並準備CAS的期間,其他執行緒可能移除A、對B進行操作,再放入位址相同的A節點。CAS因為值仍是A而成功,但串列的內容已經改變,結構因而被破壞。可以用在指標上附加更新次數一起比較的方法,或使用LR/SC的方法來防止。
- A. 這不是執行順序的問題。
- B. 正確。這是只比較值的CAS之弱點。
- C. 那是死結的成因。