volatile** có hai ý nghĩa chính:
- Giá trị biến có thể thay đổi mà không có code của bạn thay đổi nó. Do đó, mỗi khi trình biên dịch đọc biến, nó không được giả định giá trị giống lần đọc trước hoặc lần ghi trước, mà phải đọc lại từ bộ nhớ.
- Việc ghi giá trị vào biến volatile là "side effect" quan sát được từ bên ngoài. Trình biên dịch không được loại bỏ hành động ghi; ví dụ: nếu ghi hai giá trị liên tiếp, trình biên dịch phải thực sự ghi cả hai lần.
Ví dụ
i = 2;
i = i;
Trình biên dịch phải: lưu số 2, đọc biến i, lưu giá trị vừa đọc vào i.
Chi tiết hơn: Understanding volatile qualifier in C/C++