2009-07-08 32 views
11

Duplicar posibles:
How do I specify the equivalent of volatile in VB.net?equivalente volátil en VB.NET

¿Cuál es la palabra clave equivalente de VB.NET C# "volátil"?

Si no hay una palabra clave, ¿qué mecanismo es el equivalente?

+2

¿Puedo preguntar por qué quieres saber? La mayoría de las personas no intentan escribir algoritmos multiproceso sin bloqueo en VB. –

+0

@EricLippert, discúlpeme si me parece grosero, pero ¿por qué pregunta "por qué quiere saber"? Si la mayoría de la gente no desea alcanzar las estrellas, ¿deberían detenerse esos pocos que lo intentan? Personalmente, desarrollo mucho en VB y puedo decir que este lenguaje está muy por delante de la mayoría de los idiomas. – Dima

+2

@Dima: Porque en ese momento yo estaba en el equipo de diseño para C# y en contacto diario con el equipo de diseño de VB. Al solicitar retroalimentación directamente de los usuarios reales con necesidades reales y determinar cuáles son esas necesidades en su contexto, pude expresar esas necesidades de manera más capaz y precisa a mis colegas en los equipos de diseño para ambos idiomas. Me alegra saber que VB satisface tus necesidades; es un lenguaje delicioso y estrafalario. –

Respuesta

12

No hay equivalente a la clave volátil C# en VB.NET. Volátil en C# solo se asegura de que el compilador maneje las cosas de manera diferente cuando genera el IL, pero el compilador de VB.NET no tiene esta opción.

puede solucionar de esta manera (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

Dependiendo de qué tipo variable que utiliza se recomienda usar

System.Threading.Thread.VolatileRead()

System.Threading.Thread.VolatileWrite()

También System.Threading.Interlocked contiene algunas cosas agradables ...