Last Modified
2015-06-10 17:34:20 -0700
Requires

Description

monitor.rb

Copyright (C) 2001 Shugo Maeda <shugo@ruby-lang.org>

This library is distributed under the terms of the Ruby license. You can freely distribute/modify this library.

example

This is a simple example.

require 'monitor.rb'

buf = []
buf.extend(MonitorMixin)
empty_cond = buf.new_cond

# consumer
Thread.start do
  loop do
    buf.synchronize do
      empty_cond.wait_while { buf.empty? }
      print buf.shift
    end
  end
end

# producer
while line = ARGF.gets
  buf.synchronize do
    buf.push(line)
    empty_cond.signal
  end
end

The consumer thread waits for the producer thread to push a line to buf while buf.empty?, and the producer thread (main thread) reads a line from ARGF and push it to buf, then call empty_cond.signal.

blog comments powered by Disqus