多核心與同步

關於具有取得(acquire)與釋放(release)意義的記憶體操作,下列何者正確?

  1. A取得與釋放都是完全停止所有讀寫的、最重的屏障
  2. B取得是配置記憶體,釋放是free記憶體的操作
  3. C取得之後的讀寫不會移到取得之前,釋放之前的讀寫不會移到釋放之後
查看答案與解析

正確答案:C. 取得之後的讀寫不會移到取得之前,釋放之前的讀寫不會移到釋放之後

取得鎖時的操作具有取得的意義,放開鎖時的操作具有釋放的意義。取得之後的操作不會洩漏到取得鎖之前,釋放之前的操作不會洩漏到放開鎖之後,所以受鎖保護範圍內的讀寫會被限制在範圍之中。由於限制比雙向都阻止的完整屏障少,硬體可以利用其餘的調換來維持效能。

  • A. 只阻止單一方向,所以比完整屏障更輕。
  • B. 與記憶體的配置、釋放是不同的意義。
  • C. 正確。這是只阻止單側的、輕量的順序保證。
練習這個領域 前往領域頁面

多核心與同步的其他題目

  1. 在C語言中,僅對執行緒之間傳遞的旗標變數加上volatile,仍不足以作為同步,其理由下列何者正確?
  2. C11的_Atomic或C++11的std::atomic可以指定記憶體順序(memory order),其理由下列何者正確?
  3. 比較以一把鎖保護整個大型資料結構的「粗粒度鎖」,與以不同的鎖保護各個部分的「細粒度鎖」,下列說明何者正確?
  4. 關於無鎖(lock-free)演算法的性質,下列何者正確?
  5. 關於臨界區段(critical section),下列說明何者正確?

這個領域的比較