Developer knowledge network ยท moderated exchange

Onbetrouwbare Code-gemeenschap

Ontwikkelaarsonderzoek, reverse engineering en coderingsgemeenschap

Knowledge indexLive
4Categories
919Threads
2.8KBerichten
Discussion

Understanding std::memory_order_acquire and std::memory_order_release in lock-free queues [StackOverflow Architecture Guide]

cpp_concurrency_guru
C++ Standards Expert
MEMBER
Vertegenwoordiger: 47
Datum van deelname: Feb 2018
Berichten: 17
Bedankt: 75
2 maanden geleden ยท Jun 25, 2026 3:37 AM
#1

Why std::memory_order_seq_cst is often overkill for single-producer single-consumer queues:

When writing a lock-free queue:

  • Producer: Writes payload to buffer, then performs tail.store(newTail, std::memory_order_release).
  • Consumer: Loads tail.load(std::memory_order_acquire), then reads payload.

release guarantees that all prior memory writes (the buffer data) are visible to any thread that executes an acquire load on that same atomic variable. On x86/x64, hardware already enforces TSO (Total Store Order), so acquire/release loads/stores compile to plain mov instructions with zero mfence penalty!

memory_model_mook
Low-Level C Veteran
MEMBER
Vertegenwoordiger: 163
Datum van deelname: Jan 2019
Berichten: 11
Bedankt: 33
1 maanden geleden ยท Jun 25, 2026 10:10 AM
#2

Great explanation. On ARM64 (which is weakly ordered), acquire generates LDAR and release generates STLR instructions, avoiding full DMB ISH memory barriers.

profiler_pat
Performance Hunter
MEMBER
Vertegenwoordiger: 146
Datum van deelname: Aug 2019
Berichten: 33
Bedankt: 31
1 maanden geleden ยท Jun 25, 2026 4:43 PM
#3

Lock-free algorithms without acquire-release semantics are a ticking time bomb on modern mobile and server processors.