Летучий эквивалент в 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

Ответ 3

В зависимости от того, какой тип переменной вы используете, я бы предложил использовать

System.Threading.Thread.VolatileRead()

System.Threading.Thread.VolatileWrite()

Также System.Threading.Interlocked содержит некоторые приятные вещи...