多核心與同步
關於原子指令CAS(比較並交換,compare-and-swap)的動作,下列何者正確?
- A只有在記憶體的值等於預期值時才寫入新值,並可得知是否成功
- B比較兩個記憶體的值,把較大的值寫入兩者
- C無條件地交換記憶體的值與暫存器的值
查看答案與解析
正確答案:A. 只有在記憶體的值等於預期值時才寫入新值,並可得知是否成功
CAS不可分割地執行「若此位址的值仍是預期值,就改為新值」。若在讀取到寫入之間,其他執行緒已改變了值,就會失敗,所以能在確認未被更動的情況下進行更新。失敗時只要重新讀取、計算並重做CAS,形成迴圈,就能在不使用鎖的情況下安全地更新共用的值。x86的cmpxchg指令等便屬於此類。
- A. 正確。比較後若相等就進行交換。
- B. 這不是寫入較大值的指令。
- C. 無條件的交換是交換(swap)指令。