Летучий эквивалент в VB.NET
Возможный дубликат:
Как указать эквивалент volatile в VB.net?
Что такое эквивалент ключевого слова VB.NET С# "volatile"?
Если нет ключевого слова, какой механизм является эквивалентом?
Ответы
Ответ 1
В VB.NET нет эквивалентного ключевому слову С#. Волатильность на С# просто гарантирует, что компилятор обрабатывает вещи по-разному при генерации IL, но компилятор VB.NET не имеет этой опции.
Вы можете обойти это так (взято из этого сообщения в блоге):
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
Ответ 2
Используйте методы Thread.VolatileRead()
и VolatileWrite()
из BCL.
http://msdn.microsoft.com/en-us/library/system.threading.thread.volatileread.aspx
Ответ 3
В зависимости от того, какой тип переменной вы используете, я бы предложил использовать
System.Threading.Thread.VolatileRead()
System.Threading.Thread.VolatileWrite()
Также System.Threading.Interlocked содержит некоторые приятные вещи...