Class Gate

extends Object
A synchronization gate.
The gate can be open or closed. When a task tries to enter, it waits until the gate is open.

Class summary


constructor --unlocked/bool=
Constructs a new gate.

Constructors

constructor --unlocked/bool=false
Constructs a new gate.
If unlocked is true, starts with the gate open.

Methods

enter -> none
Enters the gate.
This method blocks until the gate is open.

Whether the gate is locked.

Whether the gate is unlocked.

lock -> none
Lockes the gate.
Any task that is trying to enter will block until the gate is opened again.

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).

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.

unlock -> none
Unlocks the gate, allowing tasks to enter.
Does nothing if the gate is already unlocked.