当前位置: 首页 > news >正文

Java并发编程6--重排序

重排序是指 编译 器和 理器 化程序性能而 指令序列 行重新排序的一种手段。

1.数据依赖性 

如果两个操作 访问 同一个 量,且 两个操作中有一个 写操作,此 时这 两个操作之 间就存在数据
依赖性。

数据依赖的类型

上面 3 种情况,只要重排序两个操作的 序,程序的 果就会被改
编译 器和 理器在重排序 ,会遵 守数据依赖 性, 编译 器和 理器不会改 存在数据依 关系的
两个操作的 序。
数据依 仅针对 理器中行的指令序列和线程中 行的操作, 不同处 理器之
和不同线程之 的数据依 性不被 编译 器和 理器考

2.as-if-serial语义 

as-if-serial语义 的意思是不管怎么重排序( 编译 器和 理器 了提高并行度),( 单线 程)
程序的 果不能被改 编译 器、 runtime 理器都必 遵守 as-if-serial 语义
算机中, 件技 和硬件技 有一个共同的目 :在不改 程序 果的前提下, 尽
可能提高并行度。
在不影响程序执行结果,保证数据依赖性的情况下,有些重排序是可以允许的。JMM会认为
这种重排序并不非法(not illegal),JMM允许这种重排序。

3.重排序对多线程程序的影响

单线 程程序中, 存在控制依 的操作重排序,不会改 变执 果( 也是 as-if-serial语义允
存在控制依 的操作做重排序的原因);
但在多 线 程程序中, 存在控制依 的操作重排序,可能会改变程序的执 果。
http://www.dtcms.com/a/22768.html

相关文章:

  • 动态规划 之 背包问题
  • 融合模型预测控制 (MPC) 的 RL 算法
  • 【产品推介】可驱动5A负载的降压型DC/DC转换器XBL1663
  • Jenkins同一个项目不同分支指定不同JAVA环境
  • 穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝
  • 基于Flask的广西高校舆情分析系统的设计与实现
  • 《Nuxt.js 实战:从放弃到入门》六、打造个性化文字转图片工具
  • 各类系统Pycharm安装教程
  • MongoDB between ... and ... 操作
  • Android嵌套滑动造成的滑动冲突原理分析
  • 解惑Python:一文解决osgeo库安装失败问题
  • DeepSeek + Vue实战开发
  • Python字符模糊匹配指南 RapidFuzz | python小知识
  • RocketMQ 5.0安装部署
  • Ubuntu 安装 OpenCV (C++)
  • 请解释设备像素、CSS 像素、设备独立像素、DPR、PPI 之间的区别 ?
  • 将图片base64编码后,数据转成图片
  • Jetson Agx Orin平台preferred_stride调试记录--1924x720图像异常
  • SQL代码规范
  • 外贸跨境订货系统流程设计、功能列表及源码输出
  • 数据结构:单链表(Single Linked List)及其实现
  • 奥比中光3D机器视觉相机能连接halcon吗?
  • 基于海思soc的智能产品开发(图像处理的几种需求)
  • LeetCode每日精进:20.有效的括号
  • 【Go语言快速上手】第二部分:Go语言进阶之网络编程
  • Nuclei 使用手册
  • 视频孪生在机场的应用,赋能机场智慧化建设
  • 响应式网站开发需求以及解决方案
  • Vue 3 中可读可写的计算属性(Computed Properties)的使用场景
  • 快速搭建 OLLAMA + DeepSeek 模型并对接 Cherry Studio