threads/sleeping_hands_turns_no_parens.rb

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

# A thread that sleeps for a length lets the other threads run until the
# length passes, and a sleep is cut short by a wakeup.

log = []
sleeper = Thread.new do
  log << :sleeper_start
  sleep 0.05
  log << :sleeper_end
end
worker = Thread.new { log << :worker }
[sleeper, worker].each(&:join)
p log


napper = Thread.new { sleep 5 }
Thread.pass until napper.status == "sleep"
napper.wakeup
p napper.value

Output:

[:sleeper_start, :worker, :sleeper_end]
0