为什么会出现线程不安全

在现在计算机多核CPU中,大多数是下面一种金字塔结构(多核CPU共享主存和磁盘)


单个CPU储存结构

从金字塔L0到底部L6,访问速度越来越慢、容量也越来越大,造价也越来越便宜,因为CPU运行速度远大于磁盘访问速度,一般CPU都会对数据进行进行缓存,举例说明下

int i = 0;
i++;

从本地磁盘读取i到内存,会一级级缓存(不考虑网络传输L6和L0-L4容量超出),这样CPU在多次运行指令过程中,只需从最上面缓存进行了读取,可以加快CPU运行速度,i++这种运算操作会在CPU内部进行,当CPU计算完毕再从上面一级级往下传输,直到保存到硬盘中。
多CPU系统中,可能存在有的CPU没有及时读取到最新的值,导致并发问题产生。
我们平常使用到的voliate只是保证了多个CPU可以及时获取到最新的值,但是设计到CPU指令操作,因为指令运算完成后还需要保存到硬盘中,多CPU无法保证写过程的线程安全性。

你可能感兴趣的:(为什么会出现线程不安全)