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

下面是随感,讲错了,欢迎拍砖.
几个人一起吃饭,几盘饺子下肚,到了结账的时候了.饺子大致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]);
 }
}

今天很残酷,明天很残酷,后天很美好...行胜于言<来源于博客园:黄岛主>.... 个站:配置啦
原文地址:https://www.cnblogs.com/taohuadaozhu/p/2727729.html