Class: Concurrent::Collection::RubyTimeoutQueue
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Queue
|
|
|
Instance Chain:
self,
Queue
|
|
| Inherits: |
Queue
|
| Defined in: | lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb |
Class Method Summary
- .new(*args) ⇒ RubyTimeoutQueue constructor
Instance Method Summary
-
#<<(obj)
Alias for #push.
-
#deq(non_block = false, timeout: nil)
Alias for #pop.
-
#enq(obj)
Alias for #push.
- #pop(non_block = false, timeout: nil) (also: #deq, #shift)
- #push(obj) (also: #enq, #<<)
-
#shift(non_block = false, timeout: nil)
Alias for #pop.
Constructor Details
.new(*args) ⇒ RubyTimeoutQueue
# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 6
def initialize(*args) if RUBY_VERSION >= '3.2' raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead" end super(*args) @mutex = Mutex.new @cond_var = ConditionVariable.new end
Instance Method Details
#<<(obj)
Alias for #push.
# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 24
alias_method :<<, :push
#deq(non_block = false, timeout: nil)
Alias for #pop.
# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 50
alias_method :deq, :pop
#enq(obj)
Alias for #push.
# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 23
alias_method :enq, :push
#pop(non_block = false, timeout: nil) Also known as: #deq, #shift
[ GitHub ]# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 26
def pop(non_block = false, timeout: nil) if non_block && timeout raise ArgumentError, "can't set a timeout if non_block is enabled" end if non_block super(true) elsif timeout @mutex.synchronize do deadline = Concurrent.monotonic_time + timeout while (now = Concurrent.monotonic_time) < deadline && empty? @cond_var.wait(@mutex, deadline - now) end begin return super(true) rescue ThreadError # still empty nil end end else super(false) end end
#push(obj) Also known as: #enq, #<<
[ GitHub ]# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 17
def push(obj) @mutex.synchronize do super(obj) @cond_var.signal end end
#shift(non_block = false, timeout: nil)
Alias for #pop.
# File 'lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb', line 51
alias_method :shift, :pop