Scheduler-context wait state with explicit clearing, setting, waiting, and wake operations. The Event wrapper remembers one boolean state between wake operations.


Event model


Event

Methods

INIT

(--) Sets the stored state to FALSE.

get

(-- state) Returns the current stored state.

clear

(--) Clears the stored state.

set

(--) Stores the state TRUE and wakes every currently waiting context.

wait

(--) Returns immediately when the stored state is TRUE. Otherwise waits until set, wake, or wakeOne releases the current context.

wake

(--) Wakes every currently waiting context without changing the stored state.

wakeOne

(--) Wakes the oldest currently waiting context without changing the stored state.

Waiting and cancellation semantics


Examples

set remembers the state

"String"     use
"control"    use
"sync/Event" use
"sync/sync"  use

{} Int32 {} [
  event: Event;
  context: {event: @event; CALL: [
    @event.wait
    ("released" LF) printList
  ];} () spawn;
  @event.set
  yield
  context.done? [
    ("done" LF) printList
  ] [
    ("waiting" LF) printList
  ] if
  @context.wait
  event.get [
    ("TRUE" LF) printList
  ] [
    ("FALSE" LF) printList
  ] if
  0
] "main" exportFunction

Expected Output

released
done
TRUE

wakeOne without setting the state

"String"     use
"control"    use
"sync/Event" use
"sync/sync"  use

{} Int32 {} [
  event: Event;
  context: {event: @event; CALL: [
    @event.wait
  ];} () spawn;
  yield
  @event.wakeOne
  @context.wait
  event.get [
    ("TRUE" LF) printList
  ] [
    ("FALSE" LF) printList
  ] if
  0
] "main" exportFunction

Expected Output

FALSE

clear restores blocking

"String"     use
"control"    use
"sync/Event" use
"sync/sync"  use

{} Int32 {} [
  event: Event;
  @event.set
  @event.clear
  context: {event: @event; CALL: [
    @event.wait
    ("released" LF) printList
  ];} () spawn;
  yield
  context.done? [
    ("done" LF) printList
  ] [
    ("waiting" LF) printList
  ] if
  @event.wakeOne
  @context.wait
  0
] "main" exportFunction

Expected Output

waiting
released

See also