Летучий эквивалент в VB.NET

Возможный дубликат:
Как мне указать эквивалент volatile в VB.net?

Что такое ключевое слово VB.NET, эквивалентное C# "volatile"?

Если нет ключевого слова, какой механизм эквивалентен?

3 ответа

Решение

В VB.NET нет эквивалента изменчивому ключевому слову C#. Volatile в C# просто гарантирует, что компилятор обрабатывает вещи по-разному при генерации 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

Использование Thread.VolatileRead() а также VolatileWrite() методы из BCL.

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

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

System.Threading.Thread.VolatileRead ()

System.Threading.Thread.VolatileWrite ()

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

Другие вопросы по тегам