Developer knowledge network · moderated exchange

UnreliableCode 커뮤니티

개발자 연구, 리버스 엔지니어링 및 코딩 커뮤니티

Knowledge index살다
4Categories
919Threads
2.8K게시물
Guide

Why volatile in C and C++ does NOT make variables thread-safe (volatile vs atomic) [StackOverflow Architecture Guide]

cpp_concurrency_guru
C++ Standards Expert
MEMBER
대표: 47
가입 날짜: Feb 2018
게시물: 17
감사해요: 75
1개월 전 · Jul 22, 2026 4:13 PM
#1

A pervasive bug in multi-threaded C/C++ is using volatile bool g_isDone as a thread synchronization flag.

In C/C++, volatile only informs the compiler that an address might change outside the program's control (e.g. Memory-Mapped I/O hardware register). It tells the compiler not to optimize away reads/writes.

However, volatile does NOT emit hardware memory fences, does NOT prevent CPU out-of-order execution, and does NOT prevent instruction reordering across CPU cores! Always use std::atomic<bool> for inter-thread synchronization.

memory_model_mook
Low-Level C Veteran
MEMBER
대표: 163
가입 날짜: Jan 2019
게시물: 11
감사해요: 33
1개월 전 · Jul 22, 2026 9:36 PM
#2

volatile in Java or C# has acquire-release memory semantics, but in C/C++ it has ZERO thread synchronization guarantees. Essential distinction!

assembly_micro_dev
x86_64 Micro-arch
MEMBER
대표: 186
가입 날짜: Oct 2021
게시물: 10
감사해요: 27
1개월 전 · Jul 23, 2026 9:39 AM
#3

Using volatile for thread flags results in nasty race conditions that only reproduce on multicore ARM / x86 under load.