- 主题:Int变量赋值是不是原子操作?
基本的一种场景:int有可能在硬件上是两个字,常量赋值也会按高低位被分成两个语句。
在某些硬件上,单条汇编语句也会分成两部完成,也不是原子的。
所以c++才加入了atomic标准库。
【 在 wjhtingerx 的大作中提到: 】
: 比如:
: int a, b;
: a = 1; //这个是原子操作吗?
: ...................
--
修改:milksea FROM 114.249.226.*
FROM 114.249.226.*
那就是对着汇编查cpu手册了。反正c/c++不保证。
前面说了一条cpu汇编语句也未必是原子的,armv7就是这样。
【 在 wjhtingerx 的大作中提到: 】
: 如果排除这种硬件呢?比如32位机器,32位int,最终赋值只能一个语句吧
:
:
: ...................
--
修改:milksea FROM 114.254.9.*
FROM 114.254.9.*
再研究这个没什么现实意义。你要写并发程序,那就直接用atomic库提供的接口,c或者c++都有,库不全哪怕内嵌汇编呢,反正是没有硬写c代码然后指望它正好没出错的道理。
【 在 wjhtingerx 的大作中提到: 】
: 如果排除这种硬件呢?比如32位机器,32位int,最终赋值只能一个语句吧
:
:
: ...................
--
FROM 114.254.9.*
atomic不是锁,倒是实现无锁结构的基础。这种库会要求编译器以具体cpu相关的方式实现操作,这可能是用了专门的原子指令,可能加锁,也可能就用普通的mov指令,但能保证是对的。
不正确的程序谈不到效率。
【 在 wjhtingerx 的大作中提到: 】
: atomic原理是啥,是不是就是自动加了个锁之类的?这样是不是效率就低了
:
:
: ...................
--
修改:milksea FROM 114.254.9.*
FROM 114.254.9.*