Spec-Zone.ru › Ruby on Rails 4.1

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

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

Потокобезопасная, справедливая очередь FIFO. Предназначена для использования с ConnectionPool, с которым она разделяет монитор. Но может быть и универсальной очередью Queue.

Очередь Queue из стандартной библиотеки 'thread' могла бы заменить этот класс, за исключением того, что стандартная библиотека не поддерживает ожидание с таймаутом.

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

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

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

add(element) Показать исходный код

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

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

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

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

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

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

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

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

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

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

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

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

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

Возбуждает:

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

не становится доступным после timeout секунд,

# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb, line 133
def poll(timeout = nil)
  synchronize do
    if timeout
      no_wait_poll || wait_poll(timeout)
    else
      no_wait_poll
    end
  end
end

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

Spec-Zone.ru

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