【问题标题】:Ruby: Will pessimist lock (self.lock!) work using update_all?Ruby:悲观锁(self.lock!)可以使用update_all吗?
【发布时间】:2018-10-12 09:44:31
【问题描述】:

我不想使用save! 方法,悲观锁(self.lock!)可以使用update_all 方法吗?

lock! 使用save! 方法。

Account.transaction do
  self.lock!
  account1 = Account.find(...)
  account1.balance -= 100
  account1.save!
end

lock! 使用update_all 方法。

Account.transaction do
  self.lock!
  attributes["balance"] = recalculate_balance
  Account.where(:id => self.id).update_all(attributes)
end

Rails::VERSION::STRING => "3.2.22.4"

【问题讨论】:

  • rails 3 还是 4?
  • @SergioTulentsev ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-linux]
  • 这不是我问的。
  • @SergioTulentsev 对不起我的错误。 Rails::VERSION::STRING => "3.2.22.4"

标签: ruby-on-rails ruby ruby-on-rails-3 race-condition


【解决方案1】:

是的,update_all 也会释放锁。

但是:在您提供的代码中,您将锁定事务中的行。它不会释放这个锁,因为事务无论如何都在锁定这一行。它将与事务提交一起发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2015-03-24
    • 2016-04-06
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多