zoukankan      html  css  js  c++  java
  • 从头认识java-17.4 具体解释同步(2)-具体解释竞争条件

    这一章节我们来具体讨论一下竞争条件。

    1.为什么会引起竞争条件?

    因为操作缺失原子性。


    2.什么是原子性?

    所谓原子操作是指不会被线程调度机制打断的操作;这样的操作一旦開始,就一直运行到结束。中间不会有不论什么 context switch (切换到还有一个线程)。


    3.分解上一章节转账的步骤:

    (1)读取某个账户的剩余金额。对照提取的金额

    if (accounts[fromAccount] < money) {
    			return;
    		}

    (2)从A账户转出XXX元

    accounts[fromAccount] -= money;


    (3)从B账户转入XXX元

    accounts[toAccount] += money;


    4.因为不具备原子性,并且是多线程运行,因此我们能够如果:

    (1)如今线程A已经运行了上面的第一第二步

    (2)如今线程B启动。对相同的账户进行上面的第一第二步

    (这个时候已经出错了)

    (3)线程A再运行第三步

    (4)线程B再运行第三步

    循环....

    我们上面仅仅是列出两个线程同一时候工作的情况,可是我们的測试程序开了20个线程。如果现实其中可能是20000甚至2000000个线程,数据直接就乱套了。


    5.步骤图:



    6.更糟的情况

    因为决定这个误差出现的概率是由步骤2到步骤3之间的时间控制的,时间越长,误差出现的概率越高。


    总结:这一章节主要具体讨论了竞争条件。


    这一章节就到这里,谢谢。

    -----------------------------------

    文件夹




  • 相关阅读:
    UGO小组冲刺第一天
    day04_07-三个函数的区别
    day06_08 字符串
    day06_07 字典操作02
    day06_06 字典操作01
    day06_05 字典
    day06_04 购物车讲解02
    day06_03 购物车讲解01
    day06_02 元组
    day06_01 上节回顾
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7262718.html
Copyright © 2011-2022 走看看