Fiber-aware drop-in replacements for thread objects
# File lib/em-synchrony/thread.rb, line 24 def _wakeup(fiber) fiber.resume if @slept.delete(fiber) end
# File lib/em-synchrony/thread.rb, line 12 def lock current = Fiber.current raise FiberError if @waiters.include?(current) @waiters << current Fiber.yield unless @waiters.first == current true end
# File lib/em-synchrony/thread.rb, line 20 def locked? !@waiters.empty? end
# File lib/em-synchrony/thread.rb, line 28 def sleep(timeout = nil) unlock beg = Time.now current = Fiber.current @slept[current] = true if timeout timer = EM.add_timer(timeout) do _wakeup(current) end Fiber.yield EM.cancel_timer timer # if we resumes not via timer else Fiber.yield end @slept.delete current yield if block_given? lock Time.now - beg end
# File lib/em-synchrony/thread.rb, line 61 def synchronize lock yield ensure unlock end
Generated with the Darkfish Rdoc Generator 2.