2009-07-08 23 views
11

Eventuali duplicati:
How do I specify the equivalent of volatile in VB.net?equivalente Volatile in VB.NET

Qual è la parola equivalente VB.NET di C# "volatile"?

Se non esiste una parola chiave quale meccanismo è l'equivalente?

+2

Posso chiederti perché vuoi sapere? La maggior parte delle persone non tenta di scrivere algoritmi multithread bloccati in VB. –

+0

@EricLippert, scusami se sembro maleducato, ma perché chiedi "perché vuoi sapere"? Se la maggior parte delle persone non desidera raggiungere le stelle, quei pochi che provano si fermeranno? Personalmente, faccio molto sviluppo in VB e posso dire che questa lingua è molto più avanti della maggior parte delle lingue. – Dima

+2

@Dima: Perché all'epoca ero nel team di progettazione per C# e in contatto quotidiano con il team di progettazione VB. Sollecitando il feedback direttamente dagli utenti reali con reali esigenze e determinando quali sono i bisogni nel loro contesto, ho potuto esprimere in modo più preciso e preciso le esigenze degli utenti ai miei colleghi dei team di progettazione per entrambe le lingue. Sono lieto di sapere che VB soddisfa le tue esigenze; è un linguaggio delizioso e bizzarro. –

risposta

12

Non c'è nulla di equivalente alla parola chiave volatile di C# in VB.NET. Volatile in C# si limita a fare in modo che il compilatore gestisca le cose in modo diverso durante la generazione dell'IL, ma il compilatore VB.NET non ha questa opzione.

È possibile aggirare in questo modo (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

seconda di ciò che tipo di variabile si utilizza Io suggerirei di usare

System.Threading.Thread.VolatileRead()

System.Threading.Thread.VolatileWrite()

Anche System.Threading.Interlocked contiene delle belle cose ...