多核心與同步
在自旋鎖中,不直接用原子指令去改寫鎖的變數,而是平時以一般的讀取等待鎖被釋放,只有看到鎖空出來時才使用原子指令(test-and-test-and-set),其理由下列何者正確?
- A因為一般的讀取比原子指令更準確
- B因為原子指令在一個程式中只能使用一次
- C因為只是讀取的話可以在自己的快取內等待,能大幅減少快取列在核心之間來回移動的通訊
查看答案與解析
正確答案:C. 因為只是讀取的話可以在自己的快取內等待,能大幅減少快取列在核心之間來回移動的通訊
原子指令伴隨寫入,所以等待的執行緒若重複執行,每次都會以M狀態爭奪快取列,並持續使其他核心的副本失效。若是一般的讀取,各核心只需持續在自己的快取內讀取S狀態的副本,不會產生通訊。只有在鎖被釋放而值改變時,才以原子指令去取得。
- A. 差別不在準確度。
- B. 沒有這樣的限制。
- C. 正確。可以避免每次寫入都爭奪快取列。