Method: Channel#write

Defined in:
lib/channel.rb

#write(value, sender = nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/channel.rb', line 30

def write(value, sender = nil)
  @write_mutex.synchronize {
    @mutex.synchronize {
      @value.push(:value => value, :sender => sender)
      if @reading_thread.nil?
        @writing_thread = Thread.current
        @mutex.sleep
        @write_mutex.unlock
        @writing_thread = nil
      else
        @reading_thread.wakeup
        @reading_thread = nil
      end
    }
  }
end