1、原子性是指一个操作是不可中单的。即使是在多个线程一起执行的时候,一旦操作一开始,就不会被其他线程干扰。
Q1:i++是源自操作吗?--不是。
Q2:在32位的系统上对64位数据进行操作?--不是
Q3:在32位的系统上对32位数据进行操作?--是
2、有序性
在并发时,程序的执行可能就会出现乱序。
原因:
一条指令的执行时可以分为很多步骤的(汇编)
--取值IF
-- 译码和取寄存器操作数ID
--执行或者有效地址计算EX
--存储器访问MEM
--写回WB
指令1:IF ID EX MEM WB
指令2: IF ID EX MEN WB
串行执行很浪费CPU资源
A=B+C的处理
LW:
LWR1B: IF ID EX MEM WB
LWR2C: IF ID EX MEM WB
ADDR3R1R2: IF ID X(R2值还没拿到) MEM WB
SWA1R3: IF X(R1还没计算好) ID EX MEM WB
a=b+c
d=e-f
会进行重排序
3、可见性
1、硬件优化(如写吸收,批操作)
2、编译器优化(高速缓存)