由吃饺子想到的多线程情况下的数据共享问题
下面是随感,讲错了,欢迎拍砖.
几个人一起吃饭,几盘饺子下肚,到了结账的时候了.饺子大致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]);
}
}
标签:
数据共享问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端