VB.Net non ha un equivalente di parola chiave volatile C#, quindi è necessario implementare manualmente volatile che viene in genere eseguito chiamando Thread.MemoryBarrier() prima di leggere e dopo la scrittura. Quindi, qualcosa di simile è equivalente a dichiarare C# variabile volatile:VB.NET: Devo chiamare Thread.MemoryBarrier() prima di ogni lettura se completo sempre le mie scritture con Thread.MemoryBarrier()?
''' <summary>
''' Gets a value indicating whether this instance is disposed.
''' </summary>
Public Property IsDisposed As Boolean
Get
Threading.Thread.MemoryBarrier()
Return _isDisposed
End Get
Private Set(value As Boolean)
_isDisposed = value
Threading.Thread.MemoryBarrier()
End Set
End Property
mi chiedo della barriera memoria prima lettura è necessaria se l'unico posto dove scrivo alla variabile è attraverso un setter e ci ho sempre chiamare Discussione .MemoryBarrier() dopo la scrittura.
Posso rimuovere in modo sicuro il Thread.MemoryBarrier() prima di leggere?
Modifica: per rendere più chiaro mi chiedo se posso rimuovere il Thread.MemoryBarrier() prima di leggere al fine di rimuovere i costi della recinzione di memoria per ogni lettura.
Il [classe 'Volatile'] (http://msdn.microsoft.com/en-us/library/system.threading.volatile (v = vs.110) .aspx) dovrebbe funzionare in VB.net e la classe 'Thread' contiene metodi come [' VolatileRead'] (http://msdn.microsoft.com/en-us/library/zdxzk5cw.aspx – CodesInChaos
La domanda è possibile rimuovere il Thread.MemoryBarrier() prima di leggere in modo sicuro per evitare costi potenzialmente inutili della recinzione di memoria su letture. –
Sono abbastanza sicuro che è possibile ottenere letture stantio se si rimuove. – CodesInChaos