記憶體模型
一般來說,記憶體模型可以分為靜態記憶體模型和動態記憶體模型
c++ 11的記憶體模型
std::memory_order
就是c++ 11的記憶體模型。
c++11為std::atomic提供的memory order:
enum class memory_order
;
雖然列舉定義了6個,但它們表示的是4種記憶體模型:
序號記憶體模型
memory_order值1寬鬆
memory_order_relaxed
2釋放-獲取
memory_order_acquire memory_order_release memory_order_acq_rel
3釋放-消費
memory_order_consume
4順序一致
memory_order_seq_cst
順序一致性次序
順序一致性次序是std::atomic
的預設記憶體序,它意味著將程式看做是乙個簡單的序列。如果對於乙個原子變數的所有操作都是順序一致的,那麼多執行緒程式的行為就像是這些操作都以一種特定順序被單執行緒程式執行。從同步的角度來看,乙個順序一致的store操作會與load操作同步。 順序模型還保證了在load之後執行的順序一致原子操作都得表現在store之後完成。
std::atomicx = ;
std::atomicy = ;
std::atomicz = ;
void write_x()
void write_y()
void read_x_then_y()}
void read_y_then_x()}
int main()
最後
當程式對效能沒有特殊要求時,首選std::mutex,其實使用memory_order_seq_cst。
C 11記憶體模型
一 幾種同步關係 1.執行緒內部的資料關係 1.1 sequenced before 這是表示式與表示式之間的一種配對的不對稱的關係,僅用於同乙個執行緒內。實際執行順序不能破壞語句間sequenced before的關係。1 的1.9.13 1.2 carries a dependency to 僅...
c 11 記憶體模型解讀
說到記憶體模型,首先需要明確乙個普遍存在,但卻未必人人都注意到的事實 程式通常並不是總按著照原始碼中的順序一一執行,此謂之亂序,亂序產生的原因可能有好幾種 編譯器出於優化的目的,在編譯階段將原始碼的順序進行交換。程式執行期間,指令流水被 cpu 亂序執行。inherent cache 的分層及重新整...
簡介記憶體模型與C 11的memory order
先看一段 include include int a 0 int b 0 void func1 void func2 intmain void 再看一段彙編 1 load reg3,1 將立即數1放入暫存器reg3 2 move reg4,reg3 將reg3的資料放入reg4 3 store re...