多核心與同步
關於多執行緒程式中發生的偽共享(false sharing),下列說明何者正確?
- A不同的執行緒雖然改寫不同的變數,但因為這些變數位於同一條快取列,使快取列在核心之間來回移動而變慢
- B兩個執行緒未經同步就改寫同一個變數,導致值被破壞
- C執行緒彼此等待對方的鎖而停住
查看答案與解析
正確答案:A. 不同的執行緒雖然改寫不同的變數,但因為這些變數位於同一條快取列,使快取列在核心之間來回移動而變慢
一致性是以快取列(一般為64位元組)為單位管理的。即使核心0只是改寫變數a、核心1只是改寫變數b,若a與b位於同一條快取列,每次寫入都會使對方的副本失效,快取列就會在兩個核心之間來回移動。明明結果正確,效能卻大幅下降,這就是偽共享。這是在每個執行緒各自的彙總用陣列等情況中容易發生的問題。
- A. 正確。這是明明沒有共享資料,卻共享了快取列的現象。
- B. 那是資料競爭。
- C. 那是死結(deadlock)。