VB.Net没有C# volatile关键字的等效项,因此您必须手动实现volatile,通常是在读取和写入之前调用Thread.MemoryBarrier()来完成。因此,像这样的内容相当于声明C# volatile变量:
''' <summary>
''' Gets a value indicating whether this instance is disposed.
''' </summary>
Public Property IsDisposed As Boolean
Get
Threading.Thread.MemoryBarrier()
Return _isDisposed
End Get
Private Set(value As Boolean)
_isDisposed = value
Threading.Thread.MemoryBarrier()
End Set
End Property
如果我只通过setter写入变量,并且在那里写入后始终调用Thread.MemoryBarrier(),那么在读取之前是否需要内存屏障?
我可以安全地在读取之前删除Thread.MemoryBarrier()吗?
编辑:为了更清楚,我的问题是是否可以删除读取之前的Thread.MemoryBarrier()以便每次读取时都不需要内存屏障。
Volatile
类 应该在 VB.net 中工作,而Thread
类包含像VolatileRead
这样的方法。 - CodesInChaos