3
std::atomic_flag
有2個功能,使用這些默認std::memory_order
S:爲什麼atomic_flag.clear()具有次優的默認memory_order參數?
void clear(std::memory_order order = std::memory_order_seq_cst);
bool test_and_set(std::memory_order order = std::memory_order_seq_cst);
也許我錯了,但不應該clear
總是是memory_order_release
和test_and_set
總是是memory_order_acquire
?也許我誤解了這些。
你誤解了'memory_order_release'和'memory_order_acquire'的含義。它們關於記憶順序,而不是鎖定。 (儘管定義內存順序對_implementing_ locks很重要。)請參見http://en.cppreference.com/w/cpp/atomic/memory_order。 'clear()'可以是'memory_order_release',但'test_and_set'''''''不會是'memory_order_acquire',因爲它是一個讀 - 修改 - 寫它必須是'memory_order_acq_release'。有幾種架構可以通過使用'memory_order_seq_cst'之外的其他東西來獲得小的性能提升,但通常不值得。 – 2013-04-09 13:00:40