![]() |
1
29
请参阅本规范第10.5.3节,其中规定:
非常小心 如果你有任何想要制造一个不稳定场的意图。如果你没有 彻底彻底地 |
![]() |
2
7
Volatile用于一个变量,该变量在代码运行时可以在不执行任何操作的情况下进行更改。它告诉编译器以这样一种方式编写程序集,这样就永远不会缓存变量,而是在每次使用之前确保读取它。 易失性的一个例子是一个硬件寄存器,您的代码有内存映射,并且正在读取该寄存器以确定何时设置标志。硬件可以在代码运行时设置该值,如果不使用volatile关键字,则不会注意到此更改,因为程序集永远不会实际检查该值。 |
![]() |
3
6
请考虑以下代码:
如果volatile不存在,编译器可能会生成IL,在其中它将引用存储在堆栈上,用于第一次比较,而不是在第二次比较中重用它。但是,添加volatile会告诉编译器引用可能被另一个线程更改,从而迫使它生成不会重用第一次比较的堆栈副本的IL。 |
![]() |
4
4
http://msdn.microsoft.com/en-us/library/x13ttww7(v=VS.100).aspx |
![]() |
5
3
它表示该值可能由不同的线程更改,因此需要读取该值,即使以前的指令已读取该值。 http://msdn.microsoft.com/en-us/library/x13ttww7%28VS.71%29.aspx |
![]() |
6
2
会随时通过任何方式改变它的价值 编译器不应对此变量做任何假设。 通常编译器会假设某些变量 重复注册器值。因为寄存器值可能 被任何东西改变。所以对于这些变量 应该声明为“volatile”,并且每次都要检查 出现在代码中,没有任何假设。 |
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 5 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 5 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 5 月前 |
![]() |
András Takács · Python多线程问题 9 月前 |
|
András Takács · Python多线程错误 9 月前 |