VB.NET中的易失性等价物

时间:2009-07-08 01:04:49

标签: c# vb.net multithreading volatile

  

可能重复:
  How do I specify the equivalent of volatile in VB.net?

什么是C#“volatile”的VB.NET关键字?

如果没有关键字,那么等效的机制是什么?

3 个答案:

答案 0 :(得分:13)

在VB.NET中,C#的易失性密钥没有等价。 C#中的Volatile只是确保编译器在生成IL时处理不同的事情,但VB.NET编译器没有这个选项。

您可以通过这种方式解决问题(taken from this blog post):

Function VolatileRead(Of T)(ByRef Address As T) As T
    VolatileRead = Address
    Threading.Thread.MemoryBarrier()
End Function

Sub VolatileWrite(Of T)(ByRef Address As T, ByVal Value As T)
    Threading.Thread.MemoryBarrier()
    Address = Value
End Sub

答案 1 :(得分:12)

使用BCL中的Thread.VolatileRead()VolatileWrite()方法。

http://msdn.microsoft.com/en-us/library/system.threading.thread.volatileread.aspx

答案 2 :(得分:1)

根据您使用的变量类型,我建议使用

System.Threading.Thread.VolatileRead()

System.Threading.Thread.VolatileWrite()

System.Threading.Interlocked还包含一些不错的东西......