为了更好地理解悲观锁定(使用 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
然后 contains 750
,然后1500
在下一次命中。没有锁定,它只考虑最后一个线程,结果是500
.
这是一个愚蠢的测试来尝试锁定与否之间的区别吗?我想我了解悲观锁定的原理,但不确定。