所有共享变量都需要是原子的吗?

时间:2015-10-08 07:24:56

标签: multithreading parallel-processing multicore

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

变量需要“原子”的唯一时间,,可以“一举更新,没有任何其他线程能够同时读取”,如果它甚至<当其他人正在更新时,可以读取em> 。例如,如果它在初始化时设置然后永远不会改变,那么没有人可以在它改变时读取它,因此它不必是原子的。另一方面,如果它在初始化之后发生了变化,那么除了更改线程之外的任何人都有它正在改变时读取它的风险,那么它需要是原子的(原子内在函数或受互斥或其他保护) )

答案 2 :(得分:0)

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