Цитируется из Параллелизм C ++ в действии $ Листинг 5.9
Операция fetch_sub
с семантикой memory_order_acquire
не синхронизируется ни с чем, даже если она хранитзначение, потому что это не операция освобождения.Аналогично, хранилище не может синхронизироваться с fetch_or
с семантикой memory_order_release
, потому что часть чтения fetch_or
не является операцией получения.
Мне трудно понять параграф выше.Если операция fetch_sub
с семантикой memory_order_acquire
не синхронизируется - ни с чем, почему интерфейс fetch_sub
оставляет для нас параметр порядка памяти следующим образом?
T fetch_sub( T arg, std::memory_order order = std::memory_order_seq_cst ) noexcept;