多核心與同步
C11的_Atomic或C++11的std::atomic可以指定記憶體順序(memory order),其理由下列何者正確?
- A為了指定將原子變數放在記憶體的哪個位置
- B因為只選擇所需的順序保證,就能避開不必要的屏障而維持效能
- C為了預先決定執行緒的執行順序
查看答案與解析
正確答案:B. 因為只選擇所需的順序保證,就能避開不必要的屏障而維持效能
原子變數的操作預設為循序一致性(memory_order_seq_cst),雖然最容易理解,但屏障的負擔也最大。單純的計數器只要不可分割即可,所以用relaxed;傳遞資料的旗標則用acquire與release就足夠。編譯器會配合指定,依照CPU的記憶體模型,產生所需的最少指令。
- A. 這不是指定放置位置。
- B. 正確。預設是最強的循序一致性。
- C. 這不是用來決定執行緒執行順序的。