класс ActiveRecord::ConnectionAdapters::ConnectionPool::Queue
Потокобезопасная, честная очередь LIFO. Предназначена для использования классом ConnectionPool, с которым она разделяет монитор.
Публичные методы класса
# 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
Публичные методы экземпляра
# 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 в очередь. Никогда не блокирует.
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 20
def any_waiting?
synchronize do
@num_waiting > 0
end
end Проверить, ожидают ли какие-либо потоки в очереди.
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 50
def clear
synchronize do
@queue.clear
end
end Удалить все элементы из очереди.
# 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.
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool/queue.rb, line 28
def num_waiting
synchronize do
@num_waiting
end
end Возвращает количество потоков, которые в данный момент ожидают в этой очереди.
# 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.