Spec-Zone.ru › Ruby on Rails 7.0

класс ActiveRecord::ConnectionAdapters::ConnectionPool::Queue

Родитель:
Объект

Потокобезопасная, честная очередь LIFO. Предназначена для использования классом ConnectionPool, с которым она разделяет монитор.

Публичные методы класса

new(lock = Monitor.new) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 12
def initialize(lock = Monitor.new)
  @lock = lock
  @cond = @lock.new_cond
  @num_waiting = 0
  @queue = []
end

Публичные методы экземпляра

add(element) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 35
def add(element)
  synchronize do
    @queue.push element
    @cond.signal
  end
end

Добавить element в очередь. Никогда не блокирует.

any_waiting?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 20
def any_waiting?
  synchronize do
    @num_waiting > 0
  end
end

Проверить, ожидают ли какие-либо потоки в очереди.

clear() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 50
def clear
  synchronize do
    @queue.clear
  end
end

Удалить все элементы из очереди.

delete(element) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 43
def delete(element)
  synchronize do
    @queue.delete(element)
  end
end

Если element находится в очереди, удалить и вернуть его, иначе nil.

num_waiting() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 28
def num_waiting
  synchronize do
    @num_waiting
  end
end

Возвращает количество потоков, которые в данный момент ожидают в этой очереди.

poll(timeout = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 70
def poll(timeout = nil)
  synchronize { internal_poll(timeout) }
end

Удалить элемент из начала очереди.

Если timeout не задано, удалить и вернуть голову очереди, если число доступных элементов строго больше числа потоков, которые в данный момент ожидают (то есть, не перепрыгивать в очереди). В противном случае вернуть nil.

Если timeout задано, заблокировать, если нет доступного элемента, ожидая до timeout секунд, пока элемент не станет доступным.

Возбуждает:

  • ActiveRecord::ConnectionTimeoutError, если timeout задано и нет элемента

который станет доступным в течение timeout секунд,

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API