Class Signal

A signal synchronization primitive.
Inheritance
This class must not be extended.

Class summary


wait -> none
Waits until the signal has been raised.
wait [condition] -> none
Waits until the given condition returns true.
raise --max/int= -> none
Raises the signal and unblocks the tasks that are already waiting.
operator == other/any -> bool
Whether this object is equal to the other.
stringify -> string
Stringifies this object.
await [condition] -> none
Yields until the condition block returns true.
try-await --deadline/int [condition] -> any
Yields until the condition block returns true or until the given deadline is reached.

Methods

await [condition] -> none
Yields until the condition block returns true.
This should be called from a locked method.
The condition is not allowed to change the state, only query it.

operator == other/any -> bool
Whether this object is equal to the other.
By default, identical is used for equality.
Inheritance
Classes overwrite this operator to get an equality specific to their needs. Equality operators often compare the type and field contents. For example:

class Pin:
  number/int

  constructor .number:

  operator == other:
    if other is not Pin: return false
    return number == other.number
A class doesn't have to follow the above format, but it must keep the operator in sync with any hash-code method. That is, if a class has a hash-code member, then the equality and hash-code must agree. If two instances are equal (a == b), then their hash codes must also be equal (a.hash-code == b.hash-code).

raise --max/int=null -> none
Raises the signal and unblocks the tasks that are already waiting.
If max is provided and not null, no more than max tasks are woken up in the order in which they started waiting (FIFO). The most common use case is to wake waiters up one at a time.

Stringifies this object.
Inheritance
Objects that need a human-friendly string representation should overwrite this method. The default string is based on the internal class-ID.

try-await --deadline/int [condition] -> any
Yields until the condition block returns true or until the given deadline is reached.
Returns true if the condition has been met or false if we have reached the deadline.
This should be called from a locked method.
The condition is not allowed to change the state, only query it.

wait -> none
Waits until the signal has been raised.
Raises that occur before wait has been called are not taken into account, so care must be taken to avoid losing information.

wait [condition] -> none
Waits until the given condition returns true.
The condition is evaluated on entry.
This task is blocked until the condition returns true.
The condition is re-evaluated (on this task) whenever the signal has been raised.