title: How do I manage ruby threads so they finish all their work?
body: <p>I have a computation that can be divided into independent units and the way I'm dealing with it now is by creating a fixed number of threads and then handing off chunks of work to be done in each thread. So in pseudo code here's what it looks like</p>
  
  <pre><code># main thread
  work_units.take(10).each {|work_unit| spawn_thread_for work_unit}
  
  def spawn_thread_for(work)
    Thread.new do
      do_some work
      more_work = work_units.pop
      spawn_thread_for more_work unless more_work.nil?
    end
  end
  </code></pre>
  
  <p>Basically once the initial number of threads is created each one does some work and then keeps taking stuff to be done from the work stack until nothing is left. Everything works fine when I run things in irb but when I execute the script using the interpreter things don't work out so well. I'm not sure how to make the main thread wait until all the work is finished. Is there a nice way of doing this or am I stuck with executing <code>sleep 10 until work_units.empty?</code> in the main thread</p>