“易失性”关键字的用途是什么?

2022-08-31 08:11:04

我读了一些关于关键字的文章,但我无法弄清楚它的正确用法。你能告诉我它应该在C#和Java中用于什么吗?volatile


答案 1

请考虑以下示例:

int i = 5;
System.out.println(i);

编译器可以将其优化为仅打印 5,如下所示:

System.out.println(5);

但是,如果有另一个可以更改的线程,则这是错误的行为。如果另一个线程更改为 6,则优化后的版本仍将打印 5。ii

关键字可防止此类优化和缓存,因此当一个变量可以被另一个线程更改时很有用。volatile


答案 2

对于 C# 和 Java,“volatile”告诉编译器,变量的值绝不能被缓存,因为其值可能会在程序本身的范围之外更改。然后,编译器将避免任何优化,如果变量更改“超出其控制范围”,则可能导致问题。


推荐