小白記錄貼
std::atomic<bool> a(true); //定義一個類型為atomic_bool的原子變量並賦初值為true
原子操作:
賦值:
a = true;
a.store(true);
讀取:
int b = a;
int b = a.load();
原子操作還可以包含一個參數:內存順序(memory_order),是C++11為原子類型定義的內存模型,讓程序員根據實際情況靈活地控制原子類型的執行順序。通常情況下,使用該參數將有利於編譯器進一步提高並行性能。
枚舉值 | 定義規則 |
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 | 全部存取都按順序執行 |
接口同樣為store或load, 例:
a.store(true, memory_order_relaxed);
a.load(memory_order_relaxed);