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
get
(-- state) Returns the current stored state.clear
(--) Clears the stored state.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
- sync/Signal: Wait queue with wake and wakeOne operations.
- sync/Context: Spawned context handle with waiting, output retrieval, and cancellation.
- sync/sync: Cross-platform scheduling, sleep, time, IPv4 formatting, and TCP helpers.