should use `std::memory_order_acq_rel`