java内存模型和线程安全

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、编译器优化(高速缓存)

 

转载于:https://www.cnblogs.com/XuZhiDian/p/7360505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值