【发布时间】:2016-06-30 11:08:58
【问题描述】:
为了更好地理解悲观锁(使用 InnoDB),我尝试在我的 Rails 应用程序中运行这段代码:
Thread.new do
Account.transaction do
account = Account.lock(true).first
account.balance += 250
account.save!
end
end
Thread.new do
Account.transaction do
account = Account.lock(true).first
account.balance += 500
account.save!
end
end
它确实有效,account.balance 然后包含750,然后在下一次命中时包含1500。不加锁,只考虑最后一个线程,结果为500。
这是一个愚蠢的测试来尝试锁定与不锁定之间的区别吗?我认为我了解悲观锁定的原理,但不确定。
【问题讨论】:
标签: ruby-on-rails multithreading innodb pessimistic-locking