多核心與同步

關於記憶體屏障(fence)指令的作用,下列何者正確?

  1. A保證屏障之前的記憶體操作,會比屏障之後的操作更早被其他核心看到
  2. B將記憶體在物理上隔開,禁止存取
  3. C讓程式的執行暫停,直到所有執行緒都到齊
查看答案與解析

正確答案:A. 保證屏障之前的記憶體操作,會比屏障之後的操作更早被其他核心看到

由於CPU有時會調換記憶體操作的順序,若要以既定的順序與其他核心交換資料,就需要阻止調換的指示。記憶體屏障會讓之前的讀寫全部完成(使其他核心看得到)之後,才進行後面的讀寫。鎖的取得與釋放之中也含有屏障的作用,因此受鎖保護的變數才能被正確地傳遞。

  • A. 正確。可以阻止記憶體操作順序的調換。
  • B. 禁止存取是分頁保護等機制。
  • C. 那是執行緒之間的屏障同步。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 在上方的程式碼中,執行緒1準備好data後以flag通知,執行緒2看到flag後讀取data。在弱記憶體一致性模型的CPU上,要讓執行緒2確實讀到42,下列何者是必要的做法?
  2. 關於具有取得(acquire)與釋放(release)意義的記憶體操作,下列何者正確?
  3. 在C語言中,僅對執行緒之間傳遞的旗標變數加上volatile,仍不足以作為同步,其理由下列何者正確?
  4. C11的_Atomic或C++11的std::atomic可以指定記憶體順序(memory order),其理由下列何者正確?
  5. 比較以一把鎖保護整個大型資料結構的「粗粒度鎖」,與以不同的鎖保護各個部分的「細粒度鎖」,下列說明何者正確?

這個領域的比較