ペシミスト ロック (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
ロックするかどうかの違いを試すためのばかげたテストですか?悲観的ロックの原則は理解できたと思いますが、よくわかりません。