引发可见性

case1:处理器将数据写入到写缓冲器,发送invalidate消息到总线bus,就认为成功了。此时数据并未到高速缓存中。

case2:处理器1在嗅探到invalidate之前,就去读取高速缓存的数据。如果有,就从自己高速缓存中取出旧值;如果没有,就发送read消息,去处理器0的高速缓存读。处理器0提供的就是旧值。

case3:处理器1收到invalidate消息,放到无效队列。还没来得及将自己的数据状态设为 I过期。此时读,就是旧值

原因:写缓冲器+无效队列 导致的。写数据不一定立马写入自己的高速缓存或主内存,只写入到了写缓冲器;读数据不一定立马从别人的高速缓存或主内存刷新最新值过来,invalidate消息还在无效队列。

引发有序性

case1:StoreLoad重排序

int a = 0;
int c = 1;//线程1:
a = 1; //写操作,Store
int b = c; //读操作,Load

Store写入到了写缓冲器,紧接着执行Load。此时其他线程读不到 “a = 1”,好像是写操作未执行。然而读操作成功了。

明明顺序是读、写,表现出来的确实写、读

case2:StoreStore重排序

int a,b=0;a = 1;
b = 2;

有可能a原本的状态是S共享,说明其他人都在用,于是写入到了写缓冲器,发invalidate、收invalidate ack…最后再写入高速缓存。

b原本状态是独占,说明我有锁,别人的都过期了。于是未到写缓冲器, 直接写入到高速缓存。反正别人也无权限

这样一来,其他处理器能立马看到b的新值、a的旧值,仿佛第二个写操作先执行、第一个后执行。

MESI协议为何会引发 有序性、可见性的问题相关推荐

  1. volatile可见性MESI协议volatile

    volatile 的作用 volatile 的主要作用有三点: - 保证变量的内存可见性 ,有序性(禁止指令重排序),不保证原子性. 可见性 简单解释:指当多个线程访问同一个变量时,一个线程修改了这个 ...

  2. mesi协议怎么实现_volatile的底层实现原理

    volatile关键字有两个作用 保证被volatile修饰的共享变量(vlatile int a=1)对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以 ...

  3. 2021-04-04 CPU缓存一致性 MESI协议

    一 CPU以及缓存和高速缓存结构 1.1 CPU结构 我们知道CPU主要功能,一是控制,一是运算.主要包括寄存器.控制单元.运算单元和中断系统,主要架构如下: 控制单元:主要负责分析和解释指令 算数逻 ...

  4. 【原理/Java并发】从volatile到MESI协议

    文章目录 1 前言 2 有序性 2.1 编译器层面的内存屏障 2.2 CPU层面的内存屏障 3 可见性 3.1 MESI协议 3.2 Store Buffer 和 Invalid Queue 3.3 ...

  5. CPU中的MESI协议(Intel)

    目录 CPU缓存一致性 MESI 协议 MESI优化带来的性能问题 处理器执行时的乱序优化引发的问题 as-if-serial规则 happens-before规则 as-if-serial规则和ha ...

  6. Java内存模型MESI协议

    参考链接 也许,这是东半球最叼的Java内存模型 CPU缓存一致性协议MESI 目录 多线程并发编程的三个特性实现 缓存的出现 缓存不一致 MESI协议 MESI优化和他们引入的问题 硬件内存模型 v ...

  7. 线程基础:多任务处理——MESI协议以及带来的问题:伪共享

    1.概述  本文和后续文章将着眼CPU的工作原理阐述伪共享的解决方法和volatile关键字的应用. 2.复习CPU工作原理 2.1.CPU工作原理 要清楚理解本文后续内容,就需要首先重新概述一下JV ...

  8. 缓存一致性协议和CPU缓存架构(MESI协议)、伪共享

    目录 简介 CPU高速缓存 为什么要有CPU高速缓存 局部性原理 缓存一致性 缓存一致性的要求 总线窥探 工作原理 窥探协议 一致性协议 MESI协议 总线事务 总线仲裁 总线锁定 缓存锁定 伪共享问 ...

  9. Mesi协议与内存屏障

    Mesi协议和内存屏障都是和计算机并发相关的概念. 什么是Mesi协议 计算机存储分层 多核cpu带来的问题 而随着CPU的发展,CPU逐渐发展成了多核,CPU可以同时使用多个核心控制器执行线程任务, ...

最新文章

  1. Caddy-基于go的微型serve用来做反向代理和Gateway
  2. access课程均不及格_access 第二章 查询 练习题 -
  3. [蓝桥杯]错误票据---stringstream应用举例
  4. 数据结构与算法--二叉树的深度问题
  5. idea中新建javaWeb项目
  6. 某电子工厂老板感叹创业开厂人生
  7. 爱普生l301打印机驱动 电脑版
  8. BR8041A02串口烧录PC工具操作说明(BR8041_USB_Programer_V2.0.exe)
  9. python初学入门————列表
  10. 我的推荐系统学习之路
  11. ARC 128D - Neq Neq(dp+组合数学+思维)
  12. python质因子分解_质因子分解_个人文章 - SegmentFault 思否
  13. 钉钉内网穿透工具使用
  14. 基于javaweb的房屋租赁系统(前端+后端)
  15. BC20 MQTT与GPS功能测试
  16. 使用python爬虫爬取百度新闻,告诉你社会热点话题
  17. select 向上弹起
  18. 8月顺利拿到OPPO公司Android架构师offer,一面+部长面
  19. 帝国往昔--中国的附属国
  20. linux sendmail 总结

热门文章

  1. js中的null和undefined总结
  2. SpringBoot2.XX 产生的问题
  3. MySQL SQL优化
  4. 译-在Python正则模式中search()和match()的区别是什么?
  5. list of Java class file format major version numbers?
  6. 蓝桥杯 基础练习 十进制转十六进制(水题,进制转换)
  7. Cisco Easy ***综合配置示例
  8. 【转】JS回调函数--简单易懂有实例
  9. 内嵌iframe撑高父容器,底部有4px留白问题解决办法
  10. HTML5 Canvas 绘制库存变化折线 增加超储告罄线