我目前正在使用rails 3 + postgresql做一个悲观的loking.但似乎没有办法确认锁是否正常工作,除非我经历了进行并发测试的麻烦.有没有办法通过控制台测试这个?
例
User.transaction do u1 = User.find(1, :lock => true) u2 = User.find(1) ## u2 should not be able to do anything right? end
Berimbolo.. 8
打开2个控制台
控制台1:
User.transaction do u = User.find(1, :lock => true) sleep(30) end
执行完切换后,切换到控制台2,然后执行此操作
控制台2:
u = User.find(1) u.name = "new name" u.save!
然后,您将看到控制台2在控制台1上的30秒睡眠完成之前不会提交更新.
打开2个控制台
控制台1:
User.transaction do u = User.find(1, :lock => true) sleep(30) end
执行完切换后,切换到控制台2,然后执行此操作
控制台2:
u = User.find(1) u.name = "new name" u.save!
然后,您将看到控制台2在控制台1上的30秒睡眠完成之前不会提交更新.