2009-07-08 13 views
11

可能性の重複:
How do I specify the equivalent of volatile in VB.net?揮発性同等

は "揮発性" C#のVB.NETのキーワードと同等とは何ですか?

キーワードがない場合、同等のメカニズムはありますか?

+2

私はあなたがなぜ知りたいのですか?ほとんどの人はVBでロックフリーのマルチスレッドアルゴリズムを書こうとしません。 –

+0

@EricLippert、私が失礼を犯すと私は言い訳をしますが、なぜあなたは「知りたいのですか」と尋ねますか?ほとんどの人が星に手を差し伸べることを望んでいない場合は、その数人、誰が試してみるとよいでしょうか? 個人的には、VBで多くの開発を行い、この言語はほとんどの言語よりもはるかに早いと言えるでしょう。 – Dima

+2

@Dima:当時、私はC#の設計チームと、VBの設計チームと毎日連絡を取っていたので。実際のユーザーからのフィードバックを実際のニーズに直接募集し、そのニーズに応じてニーズを判断することで、これらのユーザーニーズを、両言語の設計チームの同僚により正確に表現することができました。私はVBがあなたのニーズを満たすことを聞いてうれしく思います。それは楽しくて風変わりな言葉です。 –

答えて

12

VB.NETのC#の揮発性キーワードには相当なものはありません。揮発性のC#では、ILを生成するときにコンパイラが処理を異なるようにしますが、VB.NETコンパイラにはこのオプションがありません。

あなたはこの方法(taken from this blog post)、それを回避することができます。BCLから

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

また、System.Threading.Interlockedには素敵なものが含まれています...