【问题标题】:If Interlocked.Increment is atomic, why should I ever use ++ instead?如果 Interlocked.Increment 是原子的,为什么我应该使用 ++ 代替?
【发布时间】:2011-05-23 13:40:18
【问题描述】:

我认为这个原子操作比++ 快。我只看到有利于Interlocked.Increment 的优势。它的缺点是什么?

【问题讨论】:

  • 为什么你认为它比++更快?
  • 你不会做单线程编程吗?
  • 这里已经回答了这个问题:stackoverflow.com/questions/1034070/…
  • @Lasse 因为我认为它是在单个 CPU 周期或等效周期内执行的。

标签: .net interlocked-increment


【解决方案1】:

Atomic 意味着它是线程安全的(即一个线程不可能在另一个线程更改值时读取该值。)由于需要使用线程同步机制,这使得它变得更慢,而不是更快。如果你不关心线程安全,你想使用 ++。 Here 是一些关于 ++ 运算符在不同上下文中的相对性能的讨论。

【讨论】:

  • 我刚刚测试过,1e8 次++ 大约是一秒,同样数量的Interlocked.Increment 操作这次在我的电脑上使用了两倍以上。
  • 没错。你的结果与理论一致。
【解决方案2】:

原子并不意味着它更快。事实上,它几乎肯定会更慢。

在并发编程中,一个 操作(或一组操作)是 原子的、可线性化的、不可分割的或 不间断,如果它出现在 系统的其余部分发生 瞬间。

这仅仅意味着在操作过程中没有可观察到的副作用。它没有说明手术需要多长时间。

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 2010-11-05
    • 2010-12-06
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多