page contents

int a=10是原子操作吗?

轩辕小不懂 发布于 2021-08-04 14:56
阅读 395
收藏 0
分类:Java开发
1586
Nen
Nen
- 程序员

是的。

注意点:

i++(或++i)是非原子操作,i++是一个多步操作,而且是可以被中断的。i++可以被分割成3步,第一步读取i的值,第二步计算i+1;第三部将最终值赋值给i。

int a = b;不是原子操作。从语法的级别来看,这是也是一条语句,是原子的;但是从实际执行的二进制指令来看,由于现代计算机CPU架构体系的限制,数据不可以直接从内存搬运到另外一块内存,必须借助寄存器中断,这条语句一般对应两条计算机指令,即将变量b的值搬运到某个寄存器(如eax)中,再从该寄存器搬运到变量a的内存地址:

mov eax, dword ptr [b]  

mov dword ptr [a], eax

请先 登录 后评论