voliate原理_plumblum的博客-程序员秘密

技术标签: java多线程  

voliate原理

voliate

当使用voliate关键字修饰共享变量(实例变量、静态变量)时,它将具备两个特性:可见性和禁止指令重排序优化
在这里插入图片描述

1.可见性

  1. 变量被修改后,会立即保存在主存中,并清除工作内存中的值。
  2. 新值对于线程来说都是可见的。

2.禁止指令重排序优化

指令重排序是指CPU在正确处理指令依赖(数据依赖)并且保障程序执行得到正确结果的情况下,调整代码的执行顺序,允许将多条指令不按照程序规定顺序分开发送给各相应电路单元处理。

  1. voliate禁止指令重排序是通过lock前缀指令实现的,lock前缀的指令相当于一个内存屏障,指令重排序时不能把后面的指令重排序到lock前缀指令之前,同时它会强制将对工作内存的修改操作立即写入主内存中。

使用条件

  1. 对变量的写不依赖当前值,或者确保只有一个线程修改其值。
  2. 该变量没有包含在具有其他变量的等式。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/c_royi/article/details/85084605

智能推荐

02.App与Web测试_Rosaynatu的博客-程序员秘密

App与web测试一、app测试要点1、功能性2、UI测试3、安装与卸载4、软件升级测试5、登陆测试6、离线测试7、兼容性测试8、安全性测试9、消息推送二、Web测试点1、输入框2.1.1 字符型输入框2.1.2 数值型输入框2.1.3 日期型输入框2、搜索功能2 2.1 翻页功能2.2.2 首页、上一页、下一页、尾页2.2.3 总页数、当前页2.2.4 指定跳转页2.2.5 设定每页显示条数3、...

python_day5模块_weixin_33913377的博客-程序员秘密

模块,用一砣代码实现了某个功能的代码集合。类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。如:os 是系统相关的模块;file是文件操作相关的模块模块分为三种:自定义模块内置模块:(...

java 计算月份和日期-程序员秘密

有关月份和日期的计算

通过vue指令创建electron-vue模板项目出现一直“downloading template“问题_luffy5459的博客-程序员秘密

今天试了一下,vue init simulatedgreg/electron-vue vueapp的时候,在命令行下一直downloading template,让我很懊恼。 原来vue init创建的时候,默认是从github下载模板,而且还会把原来path/to/.vue-templates目录下的simulatedgreg-electron-vue模板目录给删除了,这样网络不好的情况下就一直downloading template。 如下截图所示,默认初始化的时候,竟然把原...

Eclipse-前言(1)_myl的博客-程序员秘密

工欲善其事,必先利其器。作为一个Java程序员,天天面对代码,要想很好的掌控代码,提高代码效率和正确率,完善的掌握工具的使用是十分必要的。个人一直比较喜欢使用Eclipse,所以对Eclipse进行一个简单的研究,提高自己能力的同时并记录下来,希望对不小心走进来的朋友也能有一些许帮助。...

一个Java开发岗位秒收2000+简历!_编程只为的博客-程序员秘密

5月15日,鹅厂腾讯发布了2019年第一季财报,财报显示,截至2019年3月31日,腾讯有5.46万名雇员,第一季度总酬金成本为人民币116.16亿元。以此计算,2019年第一季度,腾讯员工平均月薪7.09万元。在此之后,高薪的Java开发岗位也受到了许多程序员的关注,据透露,某公司一Java工作短短2天时间就收到了2143份简历,筛掉一些不满足条件的都还有1844份简历,可见目前高薪岗位...

随便推点

linux网卡 loopback,linux loopback什么意思?_weixin_39702714的博客-程序员秘密

Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样。1. TCP/IP协议栈中的loopback接口在TCP/IP中回环设备是一个通过软件实现的虚拟网络接口,它不与任何硬件相关联。loopback接口一般被完整的集成在计算机系统的内部网络框架中。IP协议中的loopback地址RFC2606中明确指出了loopback地址的标准域名为localhost。在IPv4中,其对应的I...

Marvelous Necklace Gym - 102020M_Mercury_Lc的博客-程序员秘密

M - Marvelous Necklace Gym - 102020M &:前缀和。#include <cstdio>#include <algorithm>#include <bits/stdc++.h>using namespace std;typedef long long ll;char s[200005];st...

android访问相册、拍照_CAir2的博客-程序员秘密

在访问相册的时候由于是跨进程访问相册资源,所以必须具备ContentProvider的基本知识,使用相机的时候需要指定照片存储位置,需要具备FileProvider的原理和使用由于访问相册和使用相机,所以我们需要动态申请权限。使用easypermissionsimplementation 'pub.devrel:easypermissions:0.3.0'所需权限<uses-permission android:name="android.permission.READ_EXTERNAL_S

webpack学习笔记带错误_webpack错误加载css,模块构建失败_午夜玫瑰钻的博客-程序员秘密

 这样就表示你已经安装成功了。   二、初始化项目#安装好 webpack 后,我们要怎么开始一个项目?如果你用过 grunt.js、gulpjs 一类工具,它们可以借助 yeoman 来初始化项目。webpack 的情况不太一样,我们可以把它当作 node.js 项目来初始化。当然,借用一些模板会更省事,比如 react transform boilerplate。但...

Python利用 Anaconda安装pytorch并测试GPU_conda gpu pytork 测试_Zhao_Water的博客-程序员秘密

准备工作: 针对的是anaconda下的pytorch安装,因此默认电脑已经有了anaconda。 首先查看自己的显卡版本。 网上推荐的大都是在 命令行下,使用nvcc --version命令 如下所示: nvcc --version 但是老给我报错,解决无果。 C:\Users\Dell>nvcc --version'nvcc' 不是内部或外部命令,也不是可运行的程序或批处理文件。C:\Users\Dell> 我就不信不用这个明明查看不了显卡版本。后来我换了另

推荐文章

热门文章

相关标签