Developer knowledge network · moderated exchange

UnreliableCode Topluluğu

Geliştirici Araştırması, Tersine Mühendislik ve Kodlama Topluluğu

Knowledge indexCanlı
4Categories
919Threads
2.8KGönderiler
Discussion

Comparing std::atomic<T> memory models: Sequentially Consistent vs Relaxed Performance [StackOverflow Architecture Guide]

cpp_concurrency_guru
C++ Standards Expert
MEMBER
Temsilci: 47
Katılım Tarihi: Feb 2018
Gönderiler: 17
Teşekkürler: 75
1 ay önce · Jul 6, 2026 9:46 PM
#1

When is std::memory_order_relaxed actually safe to use?

Relaxed atomic operations guarantee atomicity (no data races on the single variable itself) but provide zero synchronization or ordering constraints relative to other memory accesses.

CPP
// Safe for independent counters
std::atomic<uint64_t> g_totalPacketCount{0};
void OnPacketReceived() {
    g_totalPacketCount.fetch_add(1, std::memory_order_relaxed);
}

Because other threads only read the counter for telemetry (without relying on it to guard other data), relaxed is 100% safe and saves CPU pipeline synchronization cycles on ARM and RISC-V.

memory_model_mook
Low-Level C Veteran
MEMBER
Temsilci: 163
Katılım Tarihi: Jan 2019
Gönderiler: 11
Teşekkürler: 33
1 ay önce · Jul 7, 2026 1:46 AM
#2

Use relaxed for metrics, telemetry, and statistics. Use acquire-release for flags that synchronize shared buffers.

profiler_pat
Performance Hunter
MEMBER
Temsilci: 146
Katılım Tarihi: Aug 2019
Gönderiler: 33
Teşekkürler: 31
1 ay önce · Jul 7, 2026 8:31 PM
#3

Clear rule of thumb that prevents over-synchronization in high-throughput engines.