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

对Happens-Before的理解

Happens-Before

Happens-Before 是一种可见性模型,也就是说,在多线程环境下。原本因为指令重排序的存在会导致数据的可见性问题,也就是 A 线程修改某个共享变量对 B 线程不可见。因此,JMM 通过 Happens-Before 关系向开发人员提供跨越线程的内存可见性保证。如果一个操作的执行结果对另外一个操作可见,那么这两个操作之间必然存在Happens-Before 管理。其次,Happens-Before 关系只是描述结果的可见性,并不表示指令执行的先后顺序,也就是说只要不对结果产生影响,仍然允许指令的重排序。

Happens-Before 规则

在 JMM 中存在很多的 Happens-Before 规则:
程序顺序规则,一个线程中的每个操作,
  • happens-before 这个线程中的任意后续操作,可以简单认为是 as-if-serial也就是不管怎么重排序,单线程的程序的执行结果不能改变
  • 传递性规则(如图),也就是 A Happens-Before B,B Happens-Before C。就可以推导出 A Happens-Before C。

  • volatile 变量规则,对一个 volatile 修饰的变量的写一定 happens-before 于任意后续对这个 volatile 变量的读操作
  • 监视器锁规则(如图),一个线程对于一个锁的释放锁操作,一定 happens-before 与后续线程对这个锁的加锁操作在这个场景中,如果线程 A 获得了锁并且把 x 修改成了 12,那么后续的线程获得锁之得到的 x 的值一定是 12

  • 线程启动规则(如图),如果线程 A 执行操作 ThreadB.start(),那么线程 A 的ThreadB.start()之前的操作 happens-before 线程 B 中的任意操作。在这样一个场景中,t1 线程启动之前对于 x=10 的赋值操作,t1 线程启动以后读取 x的值一定是 10.

  • join 规则(如图),如果线程 A 执行操作 ThreadB.join()并成功返回, 那么线程 B 中的任意操作 happens-before 于线程 A 从 ThreadB.join()操作成功的返回。

相关文章:

对Happens-Before的理解

Happens-Before Happens-Before 是一种可见性模型,也就是说,在多线程环境下。原本因为指令重排序的存在会导致数据的可见性问题,也就是 A 线程修改某个共享变量对 B 线程不可见。因此,JMM 通过 Happens-Before 关系向开发人员提供…...

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…...

Java面试八股文之暑假合集

八股文暑假合集 基础篇二分查找 java基础篇7月12号面向对象和面向过程的区别重载和重写String 7月13号自动装箱和拆箱静态方法构造方法成员变量和局部变量对象引用和对象实例返回值 与equals(重要)hashcode()和equals()HashMap 7月16号线程,进程和程序final关键字的…...

竞赛选题 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

机器学习第一周

一、概述 机器学习大致会被划分为两类:监督学习,无监督学习 1.1 监督学习 监督学习其实就是,给计算机一些输入x和正确的输出y(训练数据集),让他总结x->y的映射关系,从而给他其他的输入x&a…...

大数据采集技术与预处理学习一:大数据概念、数据预处理、网络数据采集

目录 大数据概念: 1.数据采集过程中会采集哪些类型的数据? 2.非结构化数据采集的特点是什么? 3.请阐述传统的数据采集与大数据采集的区别? ​​​​​​​ ​​​​​​​4.大数据采集的数据源有哪些?针对不同的数…...

MySQL - 为什么索引结构默认使用B+树,而不是其他?

B-Tree的缺点: 范围查询效率相对较低:虽然B-Tree支持范围查询,但在实际操作中可能需要进行多次树遍历,性能较差。磁盘空间利用不高:B-Tree中的非叶子节点也存储数据,导致磁盘空间利用率相对较低。更复杂的平…...

信息系统项目管理师教程 第四版【第3章-信息系统治理-思维导图】

信息系统项目管理师教程 第四版【第3章-信息系统治理-思维导图】...

2023.NET技术沙龙知识学习笔记

目录 一.Bootstrap Blazor UI组件库企业级应用介绍1.Blazor是什么2.为什么要用Blazor3.Bootstrap Blazor是什么 二.使用WebAssembly运行、扩展.NET应用程序1.WebAssembly简介2.WebAssembly的起源3.为什么选择二进制格式?4.WebAssembly与传统JavaScript的对比5.执行速…...

Golang教程——配置环境,再探GoLand

文章目录 一、Go是什么?二、环境配置验证配置环境变量 三、安装开发者工具GoLand四、HelloGolang 一、Go是什么? Go(也称为Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言旨在提供一种简单、高…...

C++之lambda匿名、using、typedef总结【全】(二百四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

基于SpringBoot的个人博客系统

基于SpringBootVue的个人博客系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 系统公告 博客详情 后台发文 摘要 基于Spring Boot的个人博客系统是一种…...

javascript中的继承

基本术语 本文中,proto [[Prototype]] 原型链 基本思想: 构造函数生成的对象有一个指针(proto)指向构造函数的原型。如果将构造函数1的原型指向另一个构造函数2的实例,则构造函数1的实例__proto__.proto 指向了构…...

智能问答技术在百度搜索中的应用

作者 | Xiaodong 导读 本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。 全文6474字,预计阅读时…...

STM32F4X SDIO(一) SD卡介绍

STM32F4X SDIO(一) SD卡介绍 SD卡分类外观分类容量分类传输速度分类 在之前的章节中,讲过有关嵌入式的存储设备,有用I2C驱动的EEPROM、SPI驱动的FLASH和MCU内部的FLASH,这类存储设备的优点是操作简单,但是缺…...

10分钟了解JWT令牌 (JSON Web)

10分钟了解JSON Web令牌(JWT) JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。今天给大家介绍JWT的原理和用法。 1.跨域身份验证 Internet服务无法与用户身份验证分开。一般过程如下。 1.用户向服务器发送用户名和密码。…...

【经验总结】ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文

目录 前言 正文 1.CanNM状体机分析 2.ComM状态机分析 3.解决方案 4.总结 前言...

基于Android 10系统的ROC-RK3399-PC Pro源码编译

基于Android 10系统的ROC-RK3399-PC Pro源码编译 一、开发环境搭建二、下载Android 10 SDK三、编译Android 10 SDK ROC-RK3399-PC Pro资料下载处:https://www.t-firefly.com/doc/download/145.html一、开发环境搭建 Android 10 SDK的编译对PC机的要求不低&#xff…...

网络滤波器/网络滤波器/脉冲变压器要怎样进行测试,一般要测试哪些参数?

Hqst华强盛导读:网络滤波器/网络滤波器/脉冲变压器要怎样进行测试,一般要测试哪些参数?测试网络滤波器的测试方法和步骤如何,需用到哪些测试工具和仪器设备呢? 一,网络流量的监控和过滤能力测试&am…...

基于vue天气数据可视化平台

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...

游戏盾导致 Unity/UE 引擎崩溃?内存占用、SO 库冲突深度排查

接入游戏盾后碰到 Unity、UE 编辑器或打包后崩溃、内存暴涨、SO 库冲突的问题,应该都不陌生。我最近在几个项目里反复踩过这些坑,从日志分析、内存追踪到 SO 符号冲突,一步步定位下来,把完整排查流程和解决方案整理出来&#xff0…...

如何通过GDScript游戏开发入门成为独立游戏开发者

如何通过GDScript游戏开发入门成为独立游戏开发者 【免费下载链接】learn-gdscript Learn Godots GDScript programming language from zero, right in your browser, for free. 项目地址: https://gitcode.com/gh_mirrors/le/learn-gdscript 对于许多游戏爱好者来说&am…...

PromptSource批量操作工具:一次性修改数百个提示模板的技巧

PromptSource批量操作工具:一次性修改数百个提示模板的技巧 【免费下载链接】promptsource Toolkit for creating, sharing and using natural language prompts. 项目地址: https://gitcode.com/gh_mirrors/pr/promptsource PromptSource是一个强大的自然语…...

小鹅通重磅升级|AI Agent 能力全面护航,私域智能经营新范式

*文中配图及虚拟数据仅作效果展示 随着人工智能越来越贴近经营场景,小鹅通紧扣各位商家的实际需求,在原有产品基础上,以AI Agent为核心,完成了新一轮产品升级——在原有功能基础上,引入场景skills,并通过sk…...

Java实战:指定长度随机验证码生成+用户输入验证

哈喽,各位Java新手小伙伴!今天咱们结合基础语法,实现两个实用小功能:一是生成指定长度的随机验证码(支持数字大小写字母),二是实现用户输入验证码并验证;同时,会修复你提…...

实战指南:基于快马AI生成代码,快速构建并部署一个完整企业网站

今天想和大家分享一个实战经验:如何用InsCode(快马)平台快速搭建一个完整的企业网站。整个过程非常流畅,特别适合需要快速上线展示页面的场景。 项目结构规划 首先明确企业网站需要的核心页面:首页、关于我们、服务项目、案例展示、团队介绍、…...

优化TJpgDec在MM32F5微控制器上的图像解码性能 - 基于MindSDK的实践探索

1. TJpgDec在嵌入式系统中的独特价值 第一次接触TJpgDec是在三年前的一个智能家居项目里,当时需要在资源受限的STM32F407上实现图片显示功能。市面上常见的JPEG解码库要么体积庞大,要么对内存要求极高,直到发现了ChaN开发的这个轻量级解决方案…...

【30】软考软件设计师——UML类图与用例图满分精讲|下午第3题常考核心

摘要:本文是《软件设计师50讲通关|从零基础到工程师职称》专栏第30篇,聚焦模块四:应用技术(下午题)第3道高频大题,UML建模是历年下午必考核心,单题分值稳定10~12分。全文深度拆解两大核心UML图表:类图与用例图,超详细讲解类图三层结构、可见性修饰符、五大核心关系(…...

基于redis实现限流逻辑

固定窗口计数器 在固定时间窗口内,记录请求次数,如果超过阈值就拒绝,否则放行。 优点:实现简单,性能极高实现方式:incr命令和expire命令缺点:临界突发问题,时间窗口固定,…...

精准权限控制:Excel限制密码设置与使用技巧

当Excel表格发出去后,你是否会担心表格被随意修改?其实,Excel提供的“限制密码”就能很好的避免这个问题。下面一起来看看具体如何使用吧!一、认识两种限制密码Excel的限制密码分为两大类:保护工作表和保护工作簿。前者…...