首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3事务和竞争条件

Rails 3事务和竞争条件
EN

Stack Overflow用户
提问于 2011-04-04 15:24:32
回答 2查看 1.4K关注 0票数 0

我正在创建一个浏览器rpg游戏,其中玩家有一个库存和一个仓库。想象一下,在某个时刻,用户想要将一件物品从库存移动到仓库。现在安全措施必须很严密。

我认为这必须是一个事务。现在,您可以在这里看到竞争条件的可能性。移出库存->仓库的同时移出仓库->库存可能意味着物料被复制。

那么,我如何处理才能确保不会发生这样的事情呢?

编辑--该示例的竞态条件

从库存移动到仓库的功能是先将库存中的物料添加到仓库中,然后再从库存中删除。从仓库搬到inv也是同样的想法。

现在,考虑两个同时移动的动作。库存移动功能将物料添加到仓库中。与此同时,相反的情况开始了。仓库将准确的项目移动到库存中。它将找到要移动的项目,因为它刚刚被移动。库存现在从库存中删除物品。仓库从仓库中删除项目。

结果:物品丢失

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-11 03:56:03

实际上,我在Agile Rails一书中找到了如何防止竞争情况的方法。这是如何在金钱交易中完成的:

代码语言:javascript
复制
Account.transaction do
  account1.deposit(100)
  account2.withdraw(100)
end
票数 1
EN

Stack Overflow用户

发布于 2011-09-27 14:53:04

Spyros

将其放入事务中将解决一些问题,但不一定解决所有问题。请参阅此问题:

Do database transactions prevent race conditions?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5535645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档