class Polyphony::ConditionVariable

Implements a fiber-aware ConditionVariable

Public Class Methods

new() click to toggle source
# File lib/polyphony/core/sync.rb, line 50
def initialize
  @queue = Polyphony::Queue.new
end

Public Instance Methods

broadcast() click to toggle source
# File lib/polyphony/core/sync.rb, line 66
def broadcast
  while (fiber = @queue.shift)
    fiber.schedule
  end
end
signal() click to toggle source
# File lib/polyphony/core/sync.rb, line 61
def signal
  fiber = @queue.shift
  fiber.schedule
end
wait(mutex, _timeout = nil) click to toggle source
# File lib/polyphony/core/sync.rb, line 54
def wait(mutex, _timeout = nil)
  mutex.conditional_release
  @queue << Fiber.current
  Polyphony.backend_wait_event(true)
  mutex.conditional_reacquire
end