竞态条件与临界区

在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。

 

多线程同时执行下面的代码可能会出错:

1public class Counter {
2    protected long count = 0;
3    public void add(long value){
4        this.count = this.count + value;  
5    }
6}

想象下线程A和B同时执行同一个Counter对象的add()方法,我们无法知道操作系统何时会在两个线程之间切换。JVM并不是将这段代码视为单条指令来执行的,而是按照下面的顺序:

从内存获取 this.count 的值放到寄存器
将寄存器中的值增加value
将寄存器中的值写回内存

观察线程A和B交错执行会发生什么:

	this.count = 0;A:	读取 this.count 到一个寄存器 (0)B:	读取 this.count 到一个寄存器 (0)B: 	将寄存器的值加2B:	回写寄存器值(2)到内存. this.count 现在等于 2A:	将寄存器的值加3A:	回写寄存器值(3)到内存. this.count 现在等于 3

两个线程分别加了2和3到count变量上,两个线程执行结束后count变量的值应该等于5。然而由于两个线程是交叉执行的,两个线程从内存中读出的初始值都是0。然后各自加了2和3,并分别写回内存。最终的值并不是期望的5,而是最后写回内存的那个线程的值,上面例子中最后写回内存的是线程A,但实际中也可能是线程B。如果没有采用合适的同步机制,线程间的交叉执行情况就无法预料。

竞态条件 & 临界区

当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。上例中add()方法就是一个临界区,它会产生竞态条件。在临界区中使用适当的同步就可以避免竞态条件。

转载自并发编程网 – ifeve.com本文链接地址: 竞态条件与临界区

转载于:https://www.cnblogs.com/xiaolovewei/p/9081842.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 实现打印条形码_条码打印软件中如何设置条形码下面的字符间距?

条形码有两部分组成,上面是黑白条图案,用于扫描设备的识别,下面是条形码数据,方便在没有扫描设备的情况下可以手动去搜索相关的信息。一般用条码打印软件制作条形码,下面的条形码数据间距是自动生成的,而在…

计算机科学分为几个部分,计算机由几部分组成各部分的功能是什么

推荐回答一、数值计算计算机广泛地应用于科学和工程技术方面的计算,这是计算机应用的一个基本方面,也是我们比较熟悉的。如:人造卫星轨迹计算,导弹发射的各项参数的计算,房屋抗震强度的计算等。二、数据处理用计算机对…

用跑得最慢的电脑程序,理解最高深的哥德巴赫猜想

五条规则的图灵机可视化。每列像素代表一步计算,步骤从左到右。黑色代表1。最右边表示图灵机的停机。(图片来源:Peter Krumins/Quanta Magazine)文章来源:环球科学“忙碌的河狸”这个问题的目的是为了找到运行时间最长…

Leetcode--42.接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水&#…

(4)Python3笔记 之 流程控制

一、条件控制 # 语法规则 if 变量(或表达式):语句块1 elif 变量(或表达式):语句块2 else:语句块3#示例 score 83 if score > 90:print(优秀) elif score > 60 and score < 90:print(及格) else:print(不及格) 二、循环 1&#xff09;. while循环 i 0 sum 0 while i…

云专网和云专线的区别_传统IDC行业与云计算的区别?

1.传统IDC行业和云计算在服务类型上的区别&#xff1a;传统IDC行业主要是有两种模式&#xff1a;租用和托管租用是自己没有服务器&#xff0c;机房提供服务器、带宽、IP地址、机位、服务器维护等。这种模式是租用。托管是自己购买配置服务器&#xff0c;通过快递、物流等方式把…

计算机插件技术应用原理,计算机软件技术中插件技术的运用

计算机软件技术中插件技术的运用在我国科技水平的不断提升下,计算机软件方面的功能也在持续更新。其中插件技术作为计算机软件中实用性比较强的一项功能,一直被研究分析。下面是小编搜集整理的相关内容的论文&#xff0c;欢迎大家阅读参考。摘要&#xff1a;随着经济和科学技术…

未来30年,这20项技术将颠覆人类生活

来源&#xff1a;嵌入式资讯精选美国公布了一份长达35页的《新兴科技趋势报告》。该报告是在美国过去五年内由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相关研究调查报告的基础上提炼形成的。通过对近700项科技趋势的综合比对分析&#xff0c;最终明确了20项最…

攻克数据库核心技术壁垒,实现百万级QPS的高吞吐

CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件的优势&#xff0c;100%兼容开源数据库&#xff0c;百万级QPS的高吞吐&#xff0c;不限存储&#xff0c;价格仅为商用数据库的1/10。 CynosDB设计出发点: 随着云计算2.0时代的…

Leetcode--55. 跳跃游戏

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例 2: 输…

ccxprocess启动项可以禁用么_Mac怎么禁用Adobe无用自启项?

最近有使用Mac的用户询问小编Mac如何禁用Adobe无用自启项&#xff1f;每次开机Adobe都会无用自启&#xff0c;那么Mac如何禁用Adobe无用自启项&#xff0c;跟着小编一起来看看Mac禁用Adobe无用自启项教程。Mac禁用Adobe无用自启项教程&#xff1a;一&#xff1a;通过以下路径找…

某中学要对学校运动会进行计算机管理,2020年新编高职入学考试适应性试卷信息技术试卷定稿名师精品资料....

2015年福建省高等职业教育入学考试(面向普通高中考生)信息技术适应性试卷考试时间&#xff1a;120分钟&#xff0c;满分&#xff1a;150分一、选择题&#xff1a;(60分)1. 下列关于信息的说法&#xff0c;正确的是A.信息的形态不能转化B.信息有多种传播形式C. 载体本身就是信息…

CLion之C++框架篇-安装工具,基础框架的搭建(一)

CLion之C框架篇-安装工具&#xff0c;基础框架的搭建&#xff08;一&#xff09; 背景日常学习C&#xff0c;也就是看看书、在vim里写写代码。在日常项目开发中&#xff0c;也是边看书&#xff08;一是系统性理解、二是找找有什么更好的代码编写方式&#xff09;边写代码&#…

学术评论:“类脑计算完备性(Neuromorphic completeness)”概念定义中的问题

作者&#xff1a;程京德文章出处&#xff1a;程京德科学网博客链接地址&#xff1a;http://blog.sciencenet.cn/blog-2371919-1262267.html 2020年10月&#xff0c;“Nature”杂志发表了清华团队题为“A system hierarchy for brain-inspired computing”的论文 [1]&#xff0c…

Leetcode--12. 整数转罗马数字

罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…

python三国演义人物 统计分析前20个_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。...

一、安装所需要的第三方库jieba (jieba是优秀的中文分词第三分库)pyecharts (一个优秀的数据可视化库)使用pycharm安装库打开Pycharm选择【File】下的Settings出现下面页面,选择右边的【】出现下面页面&#xff0c;在此页面顶端搜索想要的库&#xff0c;然后安装就可以了二、编…

沈航计算机考研上岸,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼再写一下我的初试经验。今天晚上有时间再更初试政治&#xff1a;政治切忌开始太早&#xff0c;战线过长&#xff0c;我是从9月开始&#xff0c;跟着肖秀荣的视频课看了一遍精讲精练&#xff0c;做了一遍1000题&#xff0c;一遍真题…

你真的了解盒模型么

说到前端, 大家第一反应是不是都是vue、react、webpack等这些大大小小的框架或者工具, 但其实这些都是和js相关的, 真正的样式会被大家忽略。其实真正呈现给大家看到华丽的页面, 都是样式才让他们多了那份色彩。那么大家觉得简单的css样式, 真的简单么? 让我们一起来看下, 开启…

ios10前台收到推送_iOS 13 beta 2 推送 | iOS 13 热门疑问解答

朋友们周二早&#xff0c;今天这期分享主要是给大家解答几个 iOS 13 相关的热门问题。今天的头条推送的是 HFP 的面膜&#xff0c;靠谱产品&#xff0c;有需求的朋友可以去他们的天猫旗舰店或者小程序商场看下。是否可以直接升级 &#xff1f;今天苹果正式推送了 iOS 13 beta 2…

认知科学顶刊:挑战过去50年神经科学观点,人类智力的优势或来自于记忆储存方式...

来源&#xff1a;brainnews莱斯特大学的神经科学专家发表了一篇文章&#xff0c;打破了过去50年神经科学的观点&#xff0c;认为人类储存记忆的方式是其智力优于动物的关键因素。该文章发表在Trends in Cognitive Sciences杂志。先前的研究认为&#xff0c;海马体&#xff08;大…