когда пессимистическая блокировка выпущена в направляющих?

Принятие я делаю что-то вроде этого (от Активных Рекордных Запросов руководства)

Item.transaction do  
  i = Item.first(:lock => true)  
  i.name = 'Jones'  
  i.save 
end 

Блокировка автоматически выпущена в конце транзакции? Я посмотрел на Активное руководство Запроса и ActiveRecord:: Блокировка:: Пессимистические документы, и не могли найти, где это явно говорит, где блокировка выпущена.

14
задан user26270 8 July 2010 в 15:57
поделиться

2 ответа

Блокировка не является функцией rails, это просто добавление оператора блокировки к запросу, который будет зависеть от базы данных, которую вы используете. Пессимистическая блокировка придерживается "пессимистического" взгляда, считая, что каждый запрос подвержен повреждению. Поэтому она будет блокировать выбранные строки, пока вы не завершите транзакцию. так что Lock > query > unlock. Несмотря на то, что эти правила достаточно последовательны для разных баз данных, было бы неплохо прочитать документацию по используемой вами базе данных, чтобы узнать все специфичные для нее вещи.

Вот хорошая тема об оптимистической и пессимистической блокировке, которая объясняет это лучше, чем я могу. Оптимистическая и пессимистическая блокировка

24
ответ дан 1 December 2019 в 09:59
поделиться

Я считаю, что вам нужен блок «обеспечения», чтобы убедиться, что блокировка снята.

http://ruby-doc.org/core/classes/Mutex.src/M000916.html содержит:

  def synchronize
    lock
    begin
      yield
    ensure
      unlock
    end
  end

http://yehudakatz.com/2010/02/07/the-building- Blocks-of-ruby / , похоже, предполагает, однако, что блочная структура этого метода будет автоматически разблокирована.

-2
ответ дан 1 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: