4. 共享模型之管程(4.1 共享带来的问题)

这篇具有很好参考价值的文章主要介绍了4. 共享模型之管程(4.1 共享带来的问题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Java 的体现

两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?

public class TestCounterUnsafe {
    static int counter = 0;

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5000; i++) {
                counter++;
            }
        }, "t1");

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 5000; i++) {
                counter--;
            }
        }, "t2");

        t1.start();
        t2.start();
        t1.join();
        t2.join();
        log.debug("{}",counter);
    }
}

4. 共享模型之管程(4.1 共享带来的问题)

2、问题分析

以上的结果可能是正数、负数、零。为什么呢?因为 Java 中对静态变量的自增,自减并不是原子操作,从字节码来进行分析

例如对于 i++ 而言(i 为静态变量),实际会产生如下的 JVM 字节码指令:
4. 共享模型之管程(4.1 共享带来的问题)
多线程下这 8 行代码可能交错运行:

出现负数的情况:
4. 共享模型之管程(4.1 共享带来的问题)

出现正数的情况:
4. 共享模型之管程(4.1 共享带来的问题)

3、临界区

  • 一个程序运行多个线程本身是没有问题的
    • 问题出在多个线程访问共享资源
    • 多个线程读共享资源其实也没有问题
  • 在多个线程对共享资源读写操作时发生指令交错,就会出现问题
  • 一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区

4、竞态条件

多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件文章来源地址https://www.toymoban.com/news/detail-474439.html

到了这里,关于4. 共享模型之管程(4.1 共享带来的问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 先进语言模型带来的变革与潜力

            用户可以通过询问或交互方式与GPT-4这样的先进语言模型互动,开启通往知识宝库的大门,即时访问人类历史积累的知识、经验与智慧。 像GPT-4这样的先进语言模型,能够将人类历史上积累的海量知识和经验整合并加以利用。通过深度学习和大规模数据训练,这些模

    2024年02月22日
    浏览(34)
  • 2.3_12管程

     

    2024年02月07日
    浏览(35)
  • 管程的定义和条件变量

    在信号量机制中,每个要访问临界资源的进程都必须自备同步的PV操作,大量分散的同步操作给系统管理带来了麻烦,且容易因同步操作不当而导致系统死锁。于是,产生了一中新的进程同步工具——管程。管程的特性保证了进程互斥,无需程序员自己实现互斥,从而降低了

    2024年02月12日
    浏览(49)
  • VR步进式漫游,轻松构建三维模型,带来展示新形式!

    引言: 虚拟现实(Virtual Reality,简称VR)已经成为当今科技领域的一项创新力量,它正在逐渐渗透到不同的领域,其中步进式漫游是VR技术的一项重要应用,它能在各个行业的宣传中发挥重要作用。 一.什么是VR步进式漫游? VR步进式漫游是一种虚拟现实体验,它允许用户通

    2024年02月08日
    浏览(46)
  • ES能为你解决什么问题,又会带来什么问题?

    S主要运用于全文搜索、数据分析, 底层使用开源库Lucene,拥有丰富的REST API。内部分布式的数据存储、倒排索引等设计,使其可以快速存储、搜索、分析海量数据。典型的使用方和应用场景,如github,StackOverflow,elasticsearch+logstash+kibana 一体化的日志分析。 ES 搜索为什么快的原

    2024年04月11日
    浏览(71)
  • 容联七陌:ChatGPT大模型能力为智能客服带来新方向

    科技云报道原创。 近几个月来,大众对ChatGPT预期的持续走高,也影响到了智能客服领域公司的命运。 一方面,ChatGPT的出现为智能客服场景带来了更加“智能”的可能性;但另一方面,有人认为ChatGPT完全可以替代现有的智能客服产品,毕竟智能客服“听不懂人话”也该被整

    2024年02月03日
    浏览(34)
  • 【Python】多线程编程 ① ( 线程相关概念 | 进程 | 线程 | 协程 / 纤程 | 管程 )

    进程 与 操作系统 : 进程 是 操作系统 中 能够独立运行的单元 , 是 操作系统 对 正在运行的 应用程序 的 抽象结构 描述 ; 操作系统 中 运行的每个 应用程序 就是一个进程 ; 一个操作系统中可以运行 多个 进程 ; 每个 应用程序 都会被 操作系统 分配一个 进程 ID ; 多个进程之间

    2024年02月15日
    浏览(36)
  • Android 12对“返回”按钮的处理带来的问题

    在Android 12之前,按下“返回”按钮,会执行当前Activity的finish()方法。如果是在启动器Activity中按下“返回”按钮,则是结束App的运行。 Android 12改变了这一行为,具体见https://developer.android.google.cn/about/versions/12/behavior-changes-all?hl=zh-cn#activity-lifecycle。 对于大多数应用而言,此变

    2024年02月11日
    浏览(50)
  • MySQL版本不同带来Incorrect DATETIME value: ‘‘问题

    业务场景:线上数据同步到本地(开发测试) 版本:线上-5.7    本地-8.0 尝试操作方式: 1、SQL文件 2、备份还原 3、navicat自带传输工具 最终结果:只能备份其中的部分数据,视图同步下来出现  Incorrect DATETIME value: \\\'\\\' 问题 尝试解决方案: 按上述操作之后又会出现新的错误

    2024年02月13日
    浏览(48)
  • 普通人应该如何应对大模型时代的人工智能变革带来的挑战和机遇?

    目录 普通人应该如何应对大模型时代的人工智能变革带来的挑战和机遇?

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包