After a release operation A is performed on an atomic object M, the longest continuous subsequence of the modification order of M that consists of:
- Writes performed by the same thread that performed A. (until C++20)
- Atomic read-modify-write operations made to M by any thread. Is known as release sequence headed by A.
Q1: Why do we need the concept of release sequence?
Q2: Is the first item removed in C++20?
Q3: Why read-modify-write operations qualify in a release sequence but pure write operations don't?
What's special about relaxed RMWs that lets them form a chain without being an acquire load and release store? Either in computer-architecture terms, or in C++ language formalism? Or to put it another way, how can hardware support release-sequence semantics for atomic RMWs but have pure stores that break connections?