class Rbgo::Channel::BufferChan
Public Class Methods
new(max)
click to toggle source
Calls superclass method
Rbgo::Channel::Chan::new
# File lib/rbgo/select_chan.rb, line 263 def initialize(max) super(max) @mutex = Mutex.new @cond = ConditionVariable.new self.ios = Set.new self.register_mutex = Mutex.new end
Public Instance Methods
clear()
click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 317 def clear super notify self end
close()
click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 323 def close @mutex.synchronize do super notify @cond.broadcast self end end
pop(nonblock = false)
click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 292 def pop(nonblock = false) @mutex.synchronize do res = nil ok = true ok = false if empty? && closed? begin if nonblock res = super(true) else while empty? && !closed? @cond.wait(@mutex) end ok = false if closed? res = super(false) end notify @cond.broadcast rescue ThreadError raise unless closed? ok = false end [res, ok] end end
push(obj, nonblock = false)
click to toggle source
Calls superclass method
# File lib/rbgo/select_chan.rb, line 271 def push(obj, nonblock = false) @mutex.synchronize do begin if nonblock super(obj, true) else while length == queue_max && !closed? @cond.wait(@mutex) end super(obj, false) end notify @cond.broadcast self rescue ThreadError raise ClosedQueueError.new if closed? raise end end end