yohhoyの日記

技術的メモをしていきたい日記

atomic変数のstore/load操作と代入/型変換

C++11標準ライブラリのatomic変数std::atomic<T>について、型Tからatomic<T>への代入はstore操作に等しく、atomic<T>から型Tへの暗黙型変換はload操作に等しい*1

#include <atomic>

std::atomic<int> a;
int x;

a = 5;  // a.store(5, std::memory_order_seq_cst);
x = a;  // x = a.laod(std::memory_order_seq_cst);

N3337 29.6.5/p11-12, p16-17より引用(表記を調整)。

T atomic<T>::operator=(T desired) noexcept;
11 Effects: store(desired)
12 Returns: desired

atomic<T>::operator T() const noexcept;
16 Effects: load()
17 Returns: The result of load().

*1:より正確には memory_order_seq_cst を指定した store/load 操作