回答
如果从C/C++背景简单的答案是不使用挥发性不是。
它在机器代码级别执行的相当多的实现。但从概念上讲,它告诉编译器,变量的值在任何时候都可能发生变化。也许是由于操作系统,或由于另一个线程。因此,无论何时需要访问该值,都要确保读取实际的内存位置,并且不要试图通过将其缓存在寄存器或类似内容中而变得可爱。
啊!只需注意C#标签。在这种情况下,多线程和锁定(或不锁定)与操作系统问题有关。除非你正在做一些不安全的代码。
Re。 C#尤其是:
http://msdn.microsoft.com/en-us/library/x13ttww7(v=vs.71).aspx
你会希望编写C#时,你可以忽略这些类型的接近金属的问题和与开发良好架构的应用程序得到。
了解它......谢谢。 – Marco
它在多线程环境中使用,你可以把它看成是一个标志变量,因此该变量与挥发性总是会读取或从主存储器而不是高速缓存写入标记的价值。
volatile关键字指示一个字段可能被同时执行的多个线程修改。声明为volatile的字段不受受单个线程访问的编译器优化的限制。这确保了最新的值始终存在于现场。 MSDN
它告诉编译器不要假定值不会超出变量声明的范围。这可以防止编译器根据这个假设进行某些优化。当变量指向硬件本身正在更新的内存中的地址时,通常就是这种情况。
它告诉该字段可以从不同的线程被改变,因此,它不应该做一定的优化,将继续改变从显示出来的编译器。
比如你看一个循环内的变量,编译器可以创建代码,外循环一次读取变量并重新使用该值。如果该变量被标记为volatile,那么编译器将不会进行优化,并且代码将在每次使用该变量时读取该变量。
在C#,挥发性关键字原因读取和向其写入的字段与“挥发性” MSIL前缀发射。
挥发性读取将导致CPU之前引用存储器开始执行任何其他后续指令(在任何核心)完全执行的读取指令。
挥发性写入将导致CPU等待,直到引用存储器所有的先行指令(在所有核)已经完成执行。
如果访问已同步,这会有效地导致对易失性存储器位置的任何原子集访问行为如 。这不需要自旋锁定,或内核支持的关键部分(基本上它内置在CPU /内存管理器硬件中)的开销。
- 1. 关于该volatile关键字
- 2. volatile关键字
- 3. 没有volatile关键字
- 4. C++中的对象的volatile关键字
- 5. 关键字'for'有什么作用?
- 6. Java volatile关键字按预期工作
- 7. 关键字选择背景?
- 8. 关于引用类型的Java volatile关键字的问题
- 9. 有什么用“背景”的
- 10. 同步Java块中volatile关键字的重要性是什么?
- 11. 正确使用volatile关键字
- 12. 在C#中使用Volatile关键字
- 13. 什么类用于关键字'synchronized'?
- 14. 什么是'char'关键字用于?
- 15. 为什么背景不对?
- 16. Does Ref关键字对于DataTable有用
- 17. 什么是用于背景效果?
- 18. java1.8有什么用“_”保留关键字
- 19. volatile关键字:此程序行为
- 20. 一点澄清volatile关键字
- 21. AudioStreamer不适用于iOS5中的背景。有什么建议么?
- 22. 是否使用volatile关键字平台特有的效果?
- 23. python中的所有对象,但为什么没有关键字作为对象?
- 24. 为什么所有关于虚拟关键字的模糊?
- 25. 在B-Trees的背景下,“关键”究竟意味着什么?
- 26. dict.keys()中的关键字与关键字有什么区别?
- 27. NSAttributedString - 什么是用于文字背景色的属性?
- 28. 对于动态关键字没有intellisense?
- 29. 在actionscript中,virtual关键字有什么作用?
- 30. Python函数关键字有什么作用?
你问关于C#或C/C++吗?答案可能不同。 – JohnFx
这是哪一种语言? –
可能的重复[什么时候应该在C#中使用volatile关键字?](http://stackoverflow.com/questions/72275/when-should-the-volatile-keyword-be-used-in-c) – JohnFx