Class: Async::Condition
- Inherits:
-
Object
- Object
- Async::Condition
- Defined in:
- lib/async/condition.rb
Overview
A synchronization primitive, which allows fibers to wait until a particular condition is (edge) triggered.
Direct Known Subclasses
Instance Method Summary collapse
-
#empty? ⇒ Boolean
Is any fiber waiting on this notification?.
-
#initialize ⇒ Condition
constructor
A new instance of Condition.
-
#signal(value = nil) ⇒ Object
Signal to a given task that it should resume operations.
-
#wait ⇒ Object
Queue up the current fiber and wait on yielding the task.
Constructor Details
Instance Method Details
#empty? ⇒ Boolean
Is any fiber waiting on this notification?
44 45 46 |
# File 'lib/async/condition.rb', line 44 def empty? @waiting.empty? end |
#signal(value = nil) ⇒ Object
Signal to a given task that it should resume operations.
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/async/condition.rb', line 50 def signal(value = nil) return if @waiting.empty? waiting = self.exchange waiting.each do |fiber| Fiber.scheduler.resume(fiber, value) if fiber.alive? end return nil end |
#wait ⇒ Object
Queue up the current fiber and wait on yielding the task.
36 37 38 39 40 |
# File 'lib/async/condition.rb', line 36 def wait @waiting.stack(FiberNode.new(Fiber.current)) do Fiber.scheduler.transfer end end |