class Concurrent::UnbufferedChannel
def initialize
def initialize @probe_set = WaitableList.new end
def pop
def pop probe = Channel::Probe.new select(probe) probe.value end
def probe_set_size
def probe_set_size @probe_set.size end
def push(value)
def push(value) until @probe_set.take.set_unless_assigned(value, self) end end
def remove_probe(probe)
def remove_probe(probe) @probe_set.delete(probe) end
def select(probe)
def select(probe) @probe_set.put(probe) end