多核心與同步

在自旋鎖中,不直接用原子指令去改寫鎖的變數,而是平時以一般的讀取等待鎖被釋放,只有看到鎖空出來時才使用原子指令(test-and-test-and-set),其理由下列何者正確?

  1. A因為一般的讀取比原子指令更準確
  2. B因為原子指令在一個程式中只能使用一次
  3. C因為只是讀取的話可以在自己的快取內等待,能大幅減少快取列在核心之間來回移動的通訊
查看答案與解析

正確答案:C. 因為只是讀取的話可以在自己的快取內等待,能大幅減少快取列在核心之間來回移動的通訊

原子指令伴隨寫入,所以等待的執行緒若重複執行,每次都會以M狀態爭奪快取列,並持續使其他核心的副本失效。若是一般的讀取,各核心只需持續在自己的快取內讀取S狀態的副本,不會產生通訊。只有在鎖被釋放而值改變時,才以原子指令去取得。

  • A. 差別不在準確度。
  • B. 沒有這樣的限制。
  • C. 正確。可以避免每次寫入都爭奪快取列。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 比較互斥鎖(休眠等待的鎖)與自旋鎖,下列說明何者正確?
  2. 下列何者是死結(deadlock)的例子?
  3. 在使用多把鎖的程式中,防止死結最常見的方法為下列何者?
  4. 記憶體一致性模型(memory consistency model)所規定的是下列何者?
  5. 關於循序一致性(sequential consistency),下列說明何者正確?

這個領域的比較