class GoChanel::Chanel
Public Class Methods
new(cap_size = 1, objs = [])
click to toggle source
# File lib/go_chanel/chanel.rb, line 10 def initialize(cap_size = 1, objs = []) raise ChanelException.new("can not create a 0 size channel") if cap_size < 1 @obj_mutex = Mutex.new @close_mutex = Mutex.new @cap_size = cap_size @objs = objs @closed = false end
Public Instance Methods
cap()
click to toggle source
# File lib/go_chanel/chanel.rb, line 50 def cap @cap_size end
close()
click to toggle source
# File lib/go_chanel/chanel.rb, line 54 def close @close_mutex.synchronize do @closed = true end end
pop()
click to toggle source
# File lib/go_chanel/chanel.rb, line 33 def pop while @objs.count == 0 do return nil, false if @closed sleep(0.1) end obj = @obj_mutex.synchronize do @objs.shift end return obj, true end
push(obj)
click to toggle source
# File lib/go_chanel/chanel.rb, line 20 def push(obj) raise ChanelException.new("can not push to closed channel") if @closed while @objs.count >= @cap_size do raise ChanelException.new("can not push to closed channel") if @closed sleep(0.1) end @obj_mutex.synchronize do @objs.push(obj) end end
size()
click to toggle source
# File lib/go_chanel/chanel.rb, line 46 def size @objs.count end