• happens-before规则和as-if-serial语义


    JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,

    那么这2个操作之间必须要存在happens-before关系。这里提到的2个操作既可以是一个线程之内,也可以是不同线程之间。

    与程序员密切相关的happens-before规则如下:
    1、程序顺序规则:一个线程中的每个操作,happens-before于线程中的任意后续操作。
    2、监视器锁规则:一个锁的解锁,happens-before于随后对这个锁的加锁。
    3、volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。
    4、传递性:如果A happens-before B,且Bhappens-before C,那么Ahappens-before C。


    需要注意的是:
        两个操作之间具有happens-before关系,并不意味着前一个操作必须要在后一个操作之前执行!
    happens-before仅仅要求前一个操作(执行的结果)对后一个操作可见,且前一个操作按顺序排在第
    二个操作之前。


        一个happens-before规则对应一个或多个编译器和处理器重排序规则。对于Java程序员来说,
    happens-before规则简单易懂,它避免Java程序员为了理解JMM提供的内存可见性保证而去
    学习复杂的重排序以及这些规则的具体实现方法。

    as-if-serial语义

    as-if-serial语义的意思是:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不会改变。

    编译器、runtime和处理器都必须遵守as-if-serial语义。

    为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。

    但是,如果操作之间不存在数据依赖关系,这些操作就可能被编译器和处理器重排序。


    ---------------------
    原文:https://blog.csdn.net/u010571316/article/details/64906481

  • 相关阅读:
    ip地址查询python3小工具_V0.0.1
    安恒 堡垒机 明御®运维审计与风险控制系统 部署中遇到的问题
    zping ping包工具20180605.exe测试版
    zping ping包工具20180524.exe测试版
    XSS练习平台-XSS Challenges
    温暖而又美妙的语言
    无法连接仓库:Error performing git command: /usr/local/src/git-2.9.5 ls-remote -h https://gitee.com/skynetInfo/auto-webui HEAD
    jenkins安装方式及启动配置
    Can't open file '/opt/svn/path/db/txn-current-lock': Permission denied
    centos部署maven私服
  • 原文地址:https://www.cnblogs.com/alter888/p/10142473.html
Copyright © 2020-2023  润新知