Как я могу заблокировать набор объектов для операции?

В моем приложении rails у меня есть код вроде этого:

def foo
  if object_bar_exists
    raise "can't create bar twice!"
  end

  Bar.create
end

Который может быть вызван двумя разными запросами, поступающими на сервер приложений. Если этот код выполняется двумя запросами одновременно, и они оба запускают проверку if одновременно, ни один из них не найдет другого бара и 2 полос s будет создан.

Как лучше всего создать «мьютекс» для «коллекции баров»? Таблица мьютексов специального назначения в БД?

update

Я должен подчеркнуть, что я не могу использовать здесь мьютекс памяти, потому что параллелизм осуществляется между запросами / процессами, а не потоками.

5
задан John Bachir 13 June 2011 в 02:05
поделиться