jeudi 2 décembre 2021

Does C++11 sequential consistency memory order forbid store buffer litmus test?

Consider the store buffer litmus test with SC atomics:

// Initial
std::atomic<int> x(0), y(0);

// Thread 1           // Thread 2
x.store(1);           y.store(1);
auto r1 = y.load();   auto r2 = x.load();

Can this program end with both r1 and r2 being zero?

I can't see how this result is forbidden by the description about memory_order_seq_cst in cppreference:

A load operation with this memory order performs an acquire operation, a store performs a release operation, and read-modify-write performs both an acquire operation and a release operation, plus a single total order exists in which all threads observe all modifications in the same order

It seems to me that memory_order_seq_cst is just acquire-release plus a global store order. And I don't think the global store order comes into play in this specific litmus test.

Aucun commentaire:

Enregistrer un commentaire