1

以下は、レール 3.1.6 を使用して mysql 5.5 で実行するコードです。

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

モデルの下には、常に 2 つだけのイベント オブジェクトが存在することが期待されます。

このコードを 2 つのスレッドで実行すると、最終的に 4 つのイベント オブジェクトが生成されることがよくあります。両方のスレッドがトランザクション ブロック内のコードの実行をシリアル化することを期待していました。どうやらトランザクションはそのようには機能しません。

この種のことを行う一般的なパターンはありますか?

4

1 に答える 1