根据MSDN:
volatile 关键字表示一个字段可能被同时执行的多个线程修改。声明为 volatile 的字段不受假设由单个线程访问的编译器优化的影响。这确保了字段中始终存在最新的值。
请注意最后一句话:
这可确保字段中始终存在最新的值。
但是,这个关键字有一个问题。
我读过它可以改变指令的顺序:
First instruction Second instruction Can they be swapped? Read Read No Read Write No Write Write No Write Read Yes! <----
这意味着 John 为一个 volatile 字段设置了一个值,后来Paul 想要读取该字段,Paul 正在获取旧值!
这是怎么回事?这不是主要工作吗?
我知道还有其他解决方案,但我的问题是关于 volatile 关键字。
我(作为程序员)是否应该因为这种奇怪的行为而阻止使用这个关键字?