【问题标题】:Volatile equivalent in VB.NET [duplicate]VB.NET 中的挥发性等价物 [重复]
【发布时间】:2009-07-08 01:04:49
【问题描述】:

可能重复:
How do I specify the equivalent of volatile in VB.net?

什么是 C#“volatile”的 VB.NET 关键字等效项?

如果没有关键字,等效的机制是什么?

【问题讨论】:

  • 我能问你为什么想知道吗?大多数人不会尝试在 VB 中编写无锁多线程算法。
  • @EricLippert,如果我听起来很粗鲁,请原谅,但你为什么要问“你为什么想知道”?如果大多数人都不想伸手去摘星星——那些尝试过的少数人应该停下来吗?我个人在 VB 中进行了大量开发,可以说这种语言远远领先于大多数语言。
  • @Dima:因为当时我是 C# 设计团队的成员,并且每天都与 VB 设计团队联系。通过直接从有实际需求的真实用户那里征求反馈,并确定这些需求在他们的上下文中是什么,我可以更有能力、更准确地将这些用户需求表达给我在两种语言的设计团队中的同事。我很高兴听到 VB 满足您的需求;这是一种令人愉快而古怪的语言。

标签: c# vb.net multithreading volatile


【解决方案1】:

在 VB.NET 中没有 C# 的 volatile 关键字的等价物。 C# 中的 Volatile 只是确保编译器在生成 IL 时以不同方式处理事情,但 VB.NET 编译器没有此选项。

您可以通过这种方式解决它 (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

【讨论】:

  • 我喜欢这个,谢谢。您对如何将它与静态字段一起使用有任何建议,例如喜欢this?当调用HttpClient-typed 字段的成员时,人们会使用这些方法吗?
  • 这是过时的,还是有理由在 System.Thread.VolatileRead() 和 VolatileWrite() 上使用这种方法?
【解决方案2】:

使用 BCL 中的 Thread.VolatileRead()VolatileWrite() 方法。

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

【讨论】:

【解决方案3】:

根据您使用的变量类型,我建议使用

System.Threading.Thread.VolatileRead()

System.Threading.Thread.VolatileWrite()

System.Threading.Interlocked 也包含一些不错的东西...

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2011-09-12
    • 2020-08-04
    • 2023-03-09
    相关资源
    最近更新 更多