1

下面是我们使用 rails 3.1.6 在 mysql 5.5 上执行的代码

Model.transaction do
  model.events.destroy_all
  2.times { model.events.create!(some_body) }
end

期望在模型下总是有两个且只有两个事件对象。

当我在两个线程上运行这段代码时,我经常会得到四个事件对象。我希望两个线程都能序列化事务块内的代码执行。显然交易不是这样工作的。

做这种事情有共同的模式吗?

4

1 回答 1

2

在删除和创建事件之前,您必须使用悲观锁定来锁定您的模型。

于 2013-10-01T22:47:44.707 回答