【问题标题】:Does all shared variables needs to be atomic?所有共享变量都需要是原子的吗?
【发布时间】:2015-10-08 07:24:56
【问题描述】:

我已经开始努力学习多核编程。我开始学习 c++11 原子。我想知道他共享的所有变量是否都需要是原子的?

【问题讨论】:

标签: multithreading parallel-processing multicore


【解决方案1】:

唯一需要“原子”的变量,,可以“一举进行更新,同时没有任何其他线程能够读取它”,如果它甚至 可以在其他人更新时读取。例如,如果它在初始化时设置然后从不更改,那么在它更改时没有人可以读取它,因此它不必是原子的。另一方面,如果它在初始化后发生变化,并且存在变化的线程以外的任何人读取它的风险它正在变化,那么它需要是原子的(原子内在函数或受互斥锁或其他保护)

【讨论】:

    【解决方案2】:

    如果多个线程访问(读/写)同一个变量,那么它应该是原子的。 你也可以去this

    【讨论】:

    • 如果多个线程读取同一个变量,则没有必要将其设为原子。
    • @Drop if only reading then may not required but in read/write case it is required this what I learned from this stackoverflow.com/questions/31555700/…
    【解决方案3】:

    不一定适用于所有场景。另外,请注意,仅变量访问的原子性并不能保证完全的线程安全。它只是确保读取的特定变量是一个整体。在某些体系结构中,读取操作不会发生在单个汇编指令中。例如,如果您正在读取 64 位值,编译器可能会使用两条汇编加载指令来实现读取,这样第一条指令读取低 32 位,第二条指令读取高 32 位。这反过来又会导致竞争条件。因此,首选原子读取。

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多