Từ khóa volatile được sử dụng để làm gì?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
286 lượt xem
C#/.Net master

Trong C# volatile nói với trình biên dịch rằng giá trị của một biến không bao giờ được lưu trong bộ đệm (cache) vì giá trị của nó có thể thay đổi bên ngoài phạm vi của chính chương trình (chẳng hạn như hệ điều hành, phần cứng hoặc một thread thực thi đồng thời). Sau đó, trình biên dịch sẽ tránh mọi tối ưu hóa có thể dẫn đến sự cố nếu biến thay đổi "ngoài tầm kiểm soát của nó".

Hay nói một cách đơn giản hơn:

Đôi khi, trình biên dịch sẽ tối ưu hóa một trường (field) và sử dụng một thanh ghi (register) để lưu trữ nó. Nếu thread 1 thực hiện ghi vào trường đó và thread khác truy cập nó, thread thứ 2 đó sẽ nhận được dữ liệu cũ vì giá trị thay đổi sẽ được lưu trữ trong một thanh ghi (chứ không phải bộ nhớ).

Bạn có thể nghĩ về từ khóa volatile như nói với trình biên dịch "Tôi muốn bạn lưu trữ giá trị này trong bộ nhớ". Điều này đảm bảo rằng thread thứ 2 truy xuất giá trị mới nhất.

{{login.error}}