ruby-on-rails-3 - 多个客户端请求之间的 Rails API 中的互斥锁

标签 ruby-on-rails-3 mutual-exclusion

我在 Rails API 中遇到互斥问题。 我的数据库中有一些 Event 对象,其中包含将参加该事件的人数。

考虑我的事件方法,该方法将一个人添加到事件中:

class Event
    def add_person
        nb = self.number_of_person + 1
        # Some stuff
        self.number_of_person = nb
        self.save
    end
end

现在,假设客户 A 和 B 想参加事件 E。 Rails 将收到 2 个请求,并将并行调用 add_person 方法。 最后,事件E中的人数有可能不是加2,而是加1。

这就是我想要做的:

Client A                 | Client B                 | Possible in parallel
--------------------------------------------------------------------------
Event.find(1).show       | Event.find(1).show       | yes
Event.find(1).add_person | Event.find(1).add_person | no
Event.find(1).add_person | Event.find(2).add_person | yes

我只想对同一对象的 add_person 方法进行排队。

有办法吗?

最佳答案

标准的 ActiveRecord 事务将防止死锁或其他争用。您可能必须使用 pessimistic locking strategy .数据库就是为了防止这种事情而设计的。

关于ruby-on-rails-3 - 多个客户端请求之间的 Rails API 中的互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056737/

相关文章:

python - 在python中查找两个数组之间互斥元素的索引

javascript - 使用 "ember-rails"将现有 Rails 应用程序的路由从 Rails 迁移到 Ember

ruby-on-rails - Delayed_job 与 Appoxy SimpleWorker

ruby-on-rails - rails 自定义验证操作

ruby-on-rails - Ruby 还是 pry-nav 错误?调试分段故障反馈

ruby-on-rails - 如何在 tcserver 上启动 Rails 应用程序?

java - 同步未进入

php - 具有互斥性的二维数组的所有组合

algorithm - 如果我们将 Peterson 算法中的命令重新排序以实现互斥,会发生什么情况?

python - argparse 和互斥组,每个组都有自己需要的设置