2009-02-07 43 views

回答

14

您可以在升壓有這個功能實現的討論:http://lists.boost.org/Archives/boost/2008/11/144803.php

>能否N2427 - C++原子類型和操作來實現

>而不需要編譯器的幫助?

他們並不需要是內在如果你可以寫內嵌彙編(或 說事單獨編譯彙編),那麼你可以直接寫 操作本身。你甚至可以使用簡單的C++ (例如,只是簡單分配負載 或存儲)。您需要編譯器支持的原因是 阻止了 不適當的優化:原子 操作無法優化, 通常不得在任何其他操作之前或之後重新排序 。 這意味着即使在原子存儲必須完成之前執行的非原子 存儲,也不能將 高速緩存在寄存器中(例如)。 另外,原子操作之前發生的負載不能在原子操作之前懸掛 。在某些 編譯器上,僅使用內聯彙編器 就足夠了。在其他情況下,調用 外部函數就足夠了。 MSVC 提供 _ReadWriteBarrier()以提供編譯器排序。其他編譯器 需要其他標誌。