我正在创建一个浏览器rpg游戏,其中玩家有一个库存和一个仓库。想象一下,在某个时刻,用户想要将一件物品从库存移动到仓库。现在安全措施必须很严密。
我认为这必须是一个事务。现在,您可以在这里看到竞争条件的可能性。移出库存->仓库的同时移出仓库->库存可能意味着物料被复制。
那么,我如何处理才能确保不会发生这样的事情呢?
编辑--该示例的竞态条件
从库存移动到仓库的功能是先将库存中的物料添加到仓库中,然后再从库存中删除。从仓库搬到inv也是同样的想法。
现在,考虑两个同时移动的动作。库存移动功能将物料添加到仓库中。与此同时,相反的情况开始了。仓库将准确的项目移动到库存中。它将找到要移动的项目,因为它刚刚被移动。库存现在从库存中删除物品。仓库从仓库中删除项目。
结果:物品丢失
发布于 2011-04-11 03:56:03
实际上,我在Agile Rails一书中找到了如何防止竞争情况的方法。这是如何在金钱交易中完成的:
Account.transaction do
account1.deposit(100)
account2.withdraw(100)
end发布于 2011-09-27 14:53:04
https://stackoverflow.com/questions/5535645
复制相似问题