• 由吃饺子想到的多线程情况下的数据共享问题


    下面是随感,讲错了,欢迎拍砖.
    几个人一起吃饭,几盘饺子下肚,到了结账的时候了.饺子大致15元左右一份,有人一份有人和别人再加一份..
    因为没有零钱,大都只有50元的,20元的,仅有一张5元的.
    接下来,混乱出现了,A在跟B算的时候,同时C和B再算,C不知道B在和A算还是和自己再算,取舍之间,还要看到桌上,因为桌上面试D和E已经付的钱。
    ……是不是有点乱了..
    这里就牵涉到了我们工作中可能遇到的问题了,因为那就是一个没有处理好的多线程环境下数据共享问题。(线程就是相互之间结账行为,数据就是桌面上那些分不开的整钱)
    瞎想一下,其实一般性的结账流程和方法(此处暂不考虑一人先替所有人付账,之后再各自处理的情形):
    Do(p)
    {
      lock(桌面上的钱)//锁定操作
      {
       if(桌面上的钱可以配合P[i]把帐结了)
        Do(将p的账目想办法结了);
       else
        Do(p跟别人说一声,你先帮我付了,改天还你);
      }
    }
    void CheckOut()
    {
    Do(有零钱或者正好的人先结账);//执行完后桌面上就有有钱了,剩余未结账,且没有零钱,还不太方便欠别人帐的人组成的集合是P
    if(P.Count==0)//都完成了,可以收拾桌上的钱叫服务员过来或者送到收银台
       return;
     for(i=1;i<=P.Count;i++)
     {
      Do(p[i]);
     }
    }

    今天很残酷,明天很残酷,后天很美好...行胜于言<来源于博客园:黄岛主>.... 个站:配置啦
  • 相关阅读:
    在VC6.0中虚函数的实现原理
    札记Microsoft基本类库应用程序框架
    typedef用法剖析
    申请成功记录记录
    vc++6.0环境中swap函数
    ubuntu12.04 安装JDK7
    N皇后问题的位运算求解——目前最快的方法
    Linux常用命令小结
    Ubuntu添加自己的桌面快捷方式
    C++静态成员函数小结(转)
  • 原文地址:https://www.cnblogs.com/taohuadaozhu/p/2727729.html
Copyright © 2020-2023  润新知