多核心與同步
關於RISC-V的amoadd.w指令或x86的lock xadd指令這類取得並相加(fetch-and-add)指令的動作,下列何者正確?
- A只讀取記憶體的值,加法在暫存器中進行
- B將兩個記憶體位址的值相加,寫入第三個位址
- C對記憶體的值不可分割地加上指定的數,並回傳相加前的值
查看答案與解析
正確答案:C. 對記憶體的值不可分割地加上指定的數,並回傳相加前的值
取得並相加將讀取、加法、寫入作為單一不可分割的操作執行,所以只用一個指令就能解決counter++的資料競爭。由於會回傳相加前的值,也可用於依序發放號碼牌之類的處理(例如為各執行緒分配不重複的編號)。相較於CAS的迴圈,不會有失敗與重做,所以在許多執行緒同時更新時較為有利。
- A. 加法與對記憶體的寫入都是不可分割地進行。
- B. 這不是記憶體之間的運算。
- C. 正確。適合用於共用計數器。