as-if-serial语义的意思指:

  不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime 和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。但是,如果操作之间不存在数据依赖关系,

  这些操作可能被编译器和处理器重排序。为了具体说明,请看下面计算圆面积的代码示例:

  double pi  = 3.14;    //A

  double r   = 1.0;     //B

  double area = pi * r * r; //C

  上面三个操作的数据依赖关系如下图所示:

  

  如上图所示,A和C之间存在数据依赖关系,同时B和C之间也存在数据依赖关系。因此在最终执行的指令序列中,C不能被重排序到A和B的前面(C排到 A和B的前面,程序的结果将会被改变)。

  但A和B之间没有数据依赖关系,编译器和处理器可以重排序A和B之间的执行顺序。下图是该程序的两种执行顺序:

  

  as-if-serial语义把单线程程序保护了起来,遵守as-if-serial语义的编译器,runtime 和处理器共同为编写单线程程序的程序员创建了一个幻觉:单线程程序是按程序的顺序来执行的。as-if-serial语义使单线程程序员无需担心重排序会 干扰他们,也无需担心内存可见性问题。

转载于:https://www.cnblogs.com/jiuya/p/10791903.html

As-If-Serial 理解相关推荐

  1. 理解AXI Quad Serial Peripheral Interface(SPI) IP核

    reference :   PG153-AXI Quad SPI v3.2 LogiCORE IP Product Guide.pdf 在使用MicroBlaze过程中,调用了此IP,所以有必须仔细学 ...

  2. 《深入理解Java虚拟机》(第二版)学习3:垃圾收集器

    垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 我们这里讨论的收集器主要是基于JDK 1.7 Update 14之后的 Hotspot VM . Serial 收 ...

  3. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  4. 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析

    来自:好好学java 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好的使用! 1 JVM参数简介 首先想说的是其实这些参数我们并不是陌生的,在平时的开发和使用中经常都会遇到, ...

  5. 深入理解 Java 注解

    本文内容基于 JDK8.注解是 JDK5 引入的,后续 JDK 版本扩展了一些内容,本文中没有明确指明版本的注解都是 JDK5 就已经支持的注解. :notebook: 本文已归档到:「blog」 : ...

  6. [深入理解Android卷一全文-第九章]深入理解Vold和Rild

    为什么80%的码农都做不了架构师?>>>    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的 ...

  7. 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,G ...

  8. 深入理解SERDES接口

    http://blog.sina.com.cn/s/blog_aec06aac01013m5g.html 理解SerDes www.blog.sina.com.cn/fpgatalk FPGA发展到今 ...

  9. 大型企业网络配置系列课程详解(五) --Frame-Relay配置与相关概念的理解

    大型企业网络配置系列课程详解(五)             --Frame-Relay配置与相关概念的理解   实验原理: Frame-Relay(帧中继)简称FR,是国际电信联盟通信标准化组(ITU ...

  10. 理解并取证:广域网上的PPP协议

    目标: 1理解在广域网上数据的封装形式 2最初的SLIP协议 3PPP协议的组件 4理解并取证:PPP协议中LCP的工作原理(从数据帧的角度分析) 5理解并取证:PPP协议中NCP的工作原理(从数据帧 ...

最新文章

  1. 腾讯SNG举办TSAIC大会,学术和工业界共话AI前沿趋势
  2. 使用扩展方法和静态门面类实现伪领域对象
  3. GitHub被“中介”攻击了?啥是中间人攻击?
  4. JBPM流程部署校验之java利用XSD校验XML
  5. ASP权限管理系统源码下载
  6. 征战蓝桥 —— 2016年第七届 —— C/C++A组第10题——最大比例
  7. Zeppelin-源码编译
  8. 移动web的适配问题
  9. Linux的crond的配置流程,Linux之定时任务Crond详解
  10. 笔记本连网线显示服务器拒绝连接怎么办,笔记本插上网线没反应怎么办【解决方法】...
  11. c语言读写txt坐标文件数据,用c语言读写sgy格式的地震数据文件.pdf
  12. 2021-7-20 指针:强大而危险的灵魂【C++指针的应用---中下】(炉边小坐)
  13. 大数据预测房价湖北暂未实施
  14. 安装Kaggle库,常见问题上之目录中没有.kaggle文件夹(附解决办法!)
  15. 微博视频代发(流程b)
  16. 优优聚:一文搞懂美团外卖新业务“拼好饭”
  17. 数字电路5(基本CMOS逻辑门电路)
  18. 点评阿里云盛大云代表的云计算IaaS产业---中国云计算
  19. 运行时:Linux 和 Windows 2000上的高性能编程技术
  20. 前端入门练习之将psd文件转换为HTML文件

热门文章

  1. 图解think php,图解ThinkPHP5框架(三):配置类Config.php源码解读
  2. 获取文件夹下所有文件名(window+linux)
  3. python37安装失败怎么搞_Linux 安装Python37
  4. 福州大学数学与计算机科学学院 地址,福州大学数学与计算机科学学院导师介绍:陈神灿...
  5. nyoj1140鸡蛋栈(怒切一水)
  6. springboot开启缓存_springBoot与缓存使用
  7. 【clion】自定义优美的代码配色(主题)
  8. 【数位dp】HDU3555:Bomb(入门题目)
  9. C语言数组旋转问题(C笔记)
  10. android 替代map,Android为什么推荐使用SparseArray来替代HashMap?