threads/return_while_another_thread_returns.rb

tests/_examples/threads/return_while_another_thread_returns.rb in the metorex repository.

# A `return` in a block reaches its method even when another thread has
# returned from a method it entered earlier while this one waited.
$ready = false

def waiter
  loop do
    return(:done) if $ready
    Thread.pass
  end
end

def outer
  thread = Thread.new { waiter }
  Thread.pass
  thread
end

started = outer
$ready = true
p(started.value)

Output:

:done