美文网首页
为什么会出现线程不安全

为什么会出现线程不安全

作者: endlesswork | 来源:发表于2019-10-31 19:30 被阅读0次

在现在计算机多核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无法保证写过程的线程安全性。

相关文章

  • Collections同步化容器

    我们可以这样将线程不安全的容器转化为线程安全的。 为什么会这么神奇,看看synchronizedMap源码: 应该...

  • ThreadLocal可以解决并发问题吗?

    前言 到底什么是线程的不安全?为什么会存在线程的不安全?线程的不安全其实就是多个线程并发的去操作同一共享变量没用做...

  • 为什么会出现线程不安全

    在现在计算机多核CPU中,大多数是下面一种金字塔结构(多核CPU共享主存和磁盘) 从金字塔L0到底部L6,访问速度...

  • IOS多线程 之 线程安全,线程同步,读写安全详解

    什么是线程不安全和线程安全? 线程不安全:是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是...

  • HashMap问答

    HashMap是不是线程安全? 不是线程安全的。 为什么不安全? 线程不安全的两个添加是,数据可共享、可修改。Ha...

  • 源码解析 Handler机制

    系统为什么不允许在子线程里访问UI?那是因为Android的UI控件线程不安全,如果多线程并发访问的话会导致UI控...

  • Android异步消息处理机制之Handler、Looper、M

    为什么用异步消息处理机制?因为Android UI线程是线程不安全的,在子线程中更新UI会直接程序崩溃,另外当UI...

  • HashMap为什么是线程不安全的

    一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下...

  • iOS如何保证线程的安全

    1.什么是保证线程的安全,线程为什么会不安全 多个线程同时修改同一资源时可能会以意想不到的方式造成互相干扰,比如一...

  • HashMap为什么线程不安全

    hash碰撞与扩容导致 一直以来都知道HashMap是线程不安全的,但是到底为什么线程不安全,在多线程操作情况下什...

网友评论

      本文标题:为什么会出现线程不安全

      本文链接:https://www.haomeiwen.com/subject/wspopctx.html