volatile
关键字在C#中的作用是什么?
我在哪些情况下需要使用这个关键字?
我看到了下面的语句,但不理解为什么需要使用volatile
?
internal volatile string UserName;
volatile
关键字在C#中的作用是什么?
我在哪些情况下需要使用这个关键字?
我看到了下面的语句,但不理解为什么需要使用volatile
?
internal volatile string UserName;
Volatile用于表示变量可以在代码运行时自动更改。它告诉编译器以不缓存变量的方式编写汇编代码,而是在每次使用之前确保读取它。
一个示例是硬件寄存器,您的代码已经将其映射到内存并正在读取以确定何时设置标志。硬件可能在代码运行时设置值,如果没有使用volatile关键字,则不会注意到此更改,因为汇编代码实际上不会检查该值。
volatile关键字是给编译器(以及ngen/jit编译器)的一个提示,告诉它这个变量的值随时可能会改变,因此访问变量的优化,比如将变量的值缓存到本地,应该被禁用。
考虑下面的代码:
If (UserName == "")
// do something
If (UserName == "Fred")
// do something
MSDN将会比我更好地进行总结...
"volatile"关键字表示某个字段可能被多个同时执行的线程修改。声明为“volatile”的字段不会受到编译器假设只有单个线程访问的优化影响。这确保了该字段中始终存在最新的值。
http://msdn.microsoft.com/en-us/library/x13ttww7(v=VS.100).aspx
http://msdn.microsoft.com/en-us/library/x13ttww7%28VS.71%29.aspx
'volatile'的作用是告诉编译器,这个变量可能随时会被任何方式改变其值,编译器不能对此变量进行任何假设。
通常编译器会假定某些变量在运行时是常量。这可能导致反复检查寄存器值时出现错误,因为寄存器值可能会被改变。因此,对于这些类型的变量,应该声明为 'volatile',并且每次出现在代码中都应该进行检查,而不带任何假设。