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

网站建设 事项链接检测工具

网站建设 事项,链接检测工具,沈阳优化网站关键词,柳州网站建设推荐目录1. 如何解决重排序带来的问题2. happens-before1. 如何解决重排序带来的问题 对于编译器,JMM 的编译器重排序规则会禁止特定类型的编译器重排序。对于处理器重排序,JMM 的处理器重排序规则会要求编译器在生成指令序列时,插入特定类型的内…

目录

  • 1. 如何解决重排序带来的问题
  • 2. happens-before

1. 如何解决重排序带来的问题

对于编译器,JMM 的编译器重排序规则会禁止特定类型的编译器重排序。对于处理器重排序,JMM 的处理器重排序规则会要求编译器在生成指令序列时,插入特定类型的内存屏障(Memory Barries / Memory Fence)指令,通过内存屏障指令来禁止特定类型的处理器重排序。

由于常见的处理器内存模型比 JMM 要弱,Java 编译器在生成字节码时,会在执行指令序列的适当位置插入内存屏障来限制处理器的重排序。同时,由于各种处理器内存模型的强弱不同,为了在不同的处理器平台向程序员展示一个一致的内存模型,JMM 在不同的处理器中需要插入的内存屏障的数量和种类也不同。

CPU内存屏障

  1. LoadLoad:禁止读和读的重排序;
  2. StoreStore:禁止写和写的重排序;
  3. LoadStore:禁止读和写的重排序;
  4. StoreLoad:禁止写和读的重排序。

Java内存屏障

public final class Unsafe { // LoadLoad + LoadStore public native void loadFence();// StoreStore + LoadStore public native void storeFence();// loadFence() + storeFence() + StoreLoad public native void fullFence();
}

在这里插入图片描述
在这里插入图片描述

2. happens-before

JMM 使用 happens-before 规则来阐述操作之间的内存可见性,以及什么时候不能重排序。

在 JMM 中, 如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在 happens-before 关系。换个角度来说,如果A happens-before B,则意味着A的执行结果必须对B可见,也就是保证跨线程的内存可见性。

其中,4条规则与程序员密切相关。

  1. 程序顺序规则:一个线程中的每个操作,happens-before 于该线程中的任意后续操作;
  2. volatile 变量规则:对一个 volatile 域的写,happens-before 于任意后续对这个 volatile 域的读;
  3. synchronized 规则:对一个锁的解锁,happens-before 于随后对这个锁的加锁;
  4. 传递性:若 A happens-before B,且 B happens-before C,则 A happens-before C;
  5. start() 规则:若线程 A 执行 ThreadB.start(),则线程 A 的这个操作 happens-before 于线程 B 中的任意操作;
  6. join() 规则:若线程 A 执行 ThreadB.join() 并成功返回,那么线程 B 中的任意操作 happens-before 于线程 A 从 ThreadB.join() 的成功返回。

举个栗子

假设线程 A 执行 writer() 方法之后,线程 B 执行 reader() 方法。根据 happens-before 规则,这个过程建立的 happens-before 关系可以分为 3 类:

  1. 根据顺序规则,1 happens-before 2,3 happens-before 4;
  2. 根据 volatile 规则,2 happens-before 3;
  3. 根据 happens-before 的传递性规则,1 happens-before 4。
public class Test2 {int a = 0;volatile boolean flag = false;public void writer() {// 1a = 1;// 2flag = true;}public void reader() {// 3if (flag) {// 4int i = a;}}
}

更多关于「happens-before 和 as-if-serial 语义」请详细看这篇文章->>Java并发编程之happens-before和as-if-serial语义

http://www.dinnco.com/news/79570.html

相关文章:

  • 做seo推广做网站有用吗南京seo外包
  • 淘宝网站网页设计说明广州网站到首页排名
  • 发任务做任务得网站武汉百度开户电话
  • 网站章子怎么做阿里云搜索引擎网址
  • 网站域名备案号查询怎么开发网站
  • 重型机械网站开发模版公司地址怎么弄在百度上显示
  • 后缀的域名暂无法进行网站备案爱链接
  • 国外教做蛋糕的网站国外网站排名前十
  • 哪里可以做网站平台百度平台商家联系方式
  • 网乐科技网站建设网站一级域名和二级域名
  • 网络规划设计师含金量高吗深圳市seo上词贵不贵
  • 网站建设哪个软件好深圳设计公司
  • 大连做网站首选领超科技关键词免费网站
  • 商品网站怎么做网站规划与设计
  • 哪个网站可以查企业信息营销型网站建设优化建站
  • 网站怎么做市场分析百度搜索推广的五大优势
  • 在什么网站做推广最好专业精准网络营销推广
  • 山东省春季高考网站建设试题广州新闻头条最新消息
  • 寮步网站建设高性能怎么写软文推广
  • 校园网站建设申请报告网站托管维护
  • 淮安做网站.哪家网络公司好?如何能查到百度搜索排名
  • 石家庄网站建设销售电话保定网站建设方案优化
  • 路桥贝斯特做网站好吗最新社会舆情信息
  • 网站设计怎么做好手机优化助手下载
  • 长沙营销型网站开发app推广注册放单平台
  • 学做彩票网站有哪些百度最新收录方法
  • wordpress 极验企业网站seo推广方案
  • 自己做个网站多少钱南昌百度搜索排名优化
  • 教育 wordpress模板下载地址seo诊断优化专家
  • 绍兴网站专业制作网站页面排名优化