多核心與同步

C11的_Atomic或C++11的std::atomic可以指定記憶體順序(memory order),其理由下列何者正確?

  1. A為了指定將原子變數放在記憶體的哪個位置
  2. B因為只選擇所需的順序保證,就能避開不必要的屏障而維持效能
  3. C為了預先決定執行緒的執行順序
查看答案與解析

正確答案:B. 因為只選擇所需的順序保證,就能避開不必要的屏障而維持效能

原子變數的操作預設為循序一致性(memory_order_seq_cst),雖然最容易理解,但屏障的負擔也最大。單純的計數器只要不可分割即可,所以用relaxed;傳遞資料的旗標則用acquire與release就足夠。編譯器會配合指定,依照CPU的記憶體模型,產生所需的最少指令。

  • A. 這不是指定放置位置。
  • B. 正確。預設是最強的循序一致性。
  • C. 這不是用來決定執行緒執行順序的。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 比較以一把鎖保護整個大型資料結構的「粗粒度鎖」,與以不同的鎖保護各個部分的「細粒度鎖」,下列說明何者正確?
  2. 關於無鎖(lock-free)演算法的性質,下列何者正確?
  3. 關於臨界區段(critical section),下列說明何者正確?
  4. 關於平行程式中使用的屏障同步(barrier synchronization),下列說明何者正確?
  5. 64個核心持續同時以原子指令更新一個共用計數器時,即使增加核心也不會變快。其主要原因為下列何者?

這個領域的比較