Atomic Store Ordering: memory_order_release vs memory_order_seq_cst

Question 3 / 51 Correct so far: 0 (0 answered)

Snippet A

Release Store

static void publishIndices(std::atomic<std::uint32_t>& tail, int n) {
    for (int i = 0; i < n; ++i) {
        tail.store(static_cast<std::uint32_t>(i), std::memory_order_release);
        benchmark::DoNotOptimize(tail);
    }
}

publishIndices(tail_release, kIterations);
Snippet B

Seqcst Store

static void publishIndices(std::atomic<std::uint32_t>& tail, int n) {
    for (int i = 0; i < n; ++i) {
        tail.store(static_cast<std::uint32_t>(i), std::memory_order_seq_cst);
        benchmark::DoNotOptimize(tail);
    }
}

publishIndices(tail_seqcst, kIterations);
Shared test data (shared-setup)
constexpr int kIterations = 65536;

Which snippet is faster? (Assume x86-64)

Select the correct answer(s)