1

我目前正在用 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
4

1 回答 1

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 秒睡眠完成。

于 2014-01-29T06:40:01.230 回答