2016-02-04 17 views
3

是否有任何情况下,在单线程编程的情况下volatile是有用的?我知道它用于确保变量的值总是在内存中进行检查,所以有没有这种情况下该值可能会改变(在ST应用程序中),使应用程序/编译器不会注意到?在C#中的单线程应用程序中,volatile是否有用?

+1

不确定C#,但C的volatile属性即使在单线程应用程序中也很有用,表示内存(变量)的特定区域可能在外部访问(例如通过硬件),并且它不应该被缓存CPU。不确定是否转换为C#。 – Qix

+1

它在单线程应用程序中没有用处,应该在多线程应用程序中避免它。您应该使用锁,内存屏障或Volatile.Read(),而不是Volatile.Write()。 [这是Eric Lippert撰写的一篇文章](https://blogs.msdn.microsoft.com/ericlippert/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three/)他总结的内容: *我劝你不要做一个动荡的领域。*。 [和乔达菲称挥发性“邪恶”...](http://joeduffyblog.com/2010/12/04/sayon​​ara-volatile/) –

+0

我不确定这一点。我们没有考虑int处理多处理应用程序,其中'IntPtr'可能不是易失性的,但它可能指向一个字节数组,它本身就是一个指针,并且该值可能会改变。有点像int ** ptr =&ptr,C#版本,其中ptr可能会从另一个进程中更改 –

回答

1

不,这不是必要的。它用于同步线程之间的内存内容,以防万一只有一个线程没有意义。

相关问题