Kể từ Java 5, từ khóa volatile
đã phát hành/có được ngữ nghĩa để hiển thị các hiệu ứng phụ cho các chủ đề khác (bao gồm các bài tập cho biến động không biến đổi!). Thực hiện hai biến này, ví dụ:dễ bay hơi với phát hành/có được ngữ nghĩa
int i;
volatile int v;
Lưu ý rằng i
là biến không thường xuyên, không bay hơi. Hãy tưởng tượng thread 1 thực hiện những điều khoản sau đây:
i = 42;
v = 0;
Tại một số điểm sau trong thời gian, chủ đề 2 thực hiện những điều khoản sau đây:
int some_local_variable = v;
print(i);
Theo mô hình bộ nhớ Java, ghi của v
trong chủ đề 1 tiếp theo là đọc của v
trong chủ đề 2 đảm bảo rằng thread 2 thấy ghi vào i
được thực thi trong chuỗi 1, vì vậy giá trị 42 được in.
Câu hỏi của tôi là: volatile
có cùng bản phát hành/có được ngữ nghĩa trong C# không?
Không chính xác; xem http://blogs.msdn.com/b/ericlippert/archive/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three.aspx –