volatile báo compiler rằng giá trị biến có thể bị thay đổi bởi tác nhân ngoài luồng chương trình: thanh ghi phần cứng, interrupt/ISR, memory-mapped I/O.
Compiler khi đó không được tối ưu kiểu cache biến vào thanh ghi hay bỏ đi lần đọc "thừa" — mỗi lần truy cập phải đọc/ghi thẳng bộ nhớ.
cpp
volatile int* reg = ...;
while (*reg == 0) { } // đọc lại thật mỗi vòng, không bị tối ưu bỏLưu ý quan trọng: volatile KHÔNG đảm bảo tính nguyên tử (atomicity) hay thứ tự bộ nhớ giữa các luồng — nó không phải công cụ đồng bộ đa luồng.
Dùng std::atomic / mutex cho threading.