当前位置:首页 > 开发 > 数据库 > 正文

竞态条件与临界区

发表于: 2014-02-21   作者:cuisuqiang   来源:转载   浏览次数:
摘要: 当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件。界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现。 有临界区是为了让更多的其它线程能安全够访问资源。 class Counter { protected long count = 0; public voi

当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件。
界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现

有临界区是为了让更多的其它线程能安全够访问资源。

class Counter {
	protected long count = 0;
	public void add(long value) {
		this.count = this.count + value;
	}
}

 

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

 

请您到ITEYE网站看 java小强 原创,谢谢!

http://cuisuqiang.iteye.com/ 

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

竞态条件与临界区

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
竞态条件,说得通俗一点,就是线程A 需要判断一个变量的状态,然后根据这个变量的状态来执行某个操
竞态条件,说得通俗一点,就是线程A 需要判断一个变量的状态,然后根据这个变量的状态来执行某个操
《高质量程序设计艺术》样章连载——3.3 竞态条件 原书名:Code Quality: The Open Source Perspect
本篇主要介绍一下几个内容: 竞态条件(race condition) exec系函数 解释器文件 1 竞态条件(Race
本文知识点主要来源于百度百科: 一些很简单的知识点:不知道你是否能够回答的上来! 不论是硬件临界
临界区问题是嵌入式软件编程一个不得不面对的关键性问题。特别对于底层驱动,代码在内存中只有一份
一,概念 并发(concurrency)指的是多个执行单元同时被执行 竞态(race condition)并发的执行单元
综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何
先看一段程序, 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Cla
程序描述: 主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号