C++ 並行編程之memory_order

一.如果只是簡單地解決在多線程中對共享資源的讀寫併發問題,只需要用C++以下內容: 線程類 thread, 原子數據類模板 atomic<T> t, 互斥 mutex, 鎖 lock, 條件變量 condition_variables.

 
二.在此基礎上,如果想在並行編程中獲得更好的性能,尤其當使用的是一些弱內存順序的平臺(比如PowerPC)的話,設定原子操作間的內存順序則很有必要.
 
 
C++11 加入了支持並行編程的原子操作模塊,而所有的原子操作都有一個參數 memory_order.
1.內存模型 簡介
內存模型是一個硬件上的概念,表示機器指令是以什麼樣的順序被處理器執行的 (現代的處理器不是逐條處理機器指令的) .
 
typedef enum memory_order {
    memory_order_relaxed,    // 不對執行順序做保證
    memory_order_acquire,    // 本線程中,所有後續的讀操作必須在本條原子操作完成後執行
    memory_order_release,    // 本線程中,所有之前的寫操作完成後才能執行本條原子操作
    memory_order_acq_rel,    // 同時包含 memory_order_acquire 和 memory_order_release
    memory_order_consume,    // 本線程中,所有後續的有關本原子類型的操作,必須在本條原子操作完成之後執行
    memory_order_seq_cst    // 全部存取都按順序執行
    } memory_order;

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章