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之间的时间控制的,时间越长,误差出现的概率越高。


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


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

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

    文件夹




  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7262718.html
Copyright © 2011-2022 走看看