(since continuations are often poorly understood, more examples is always better :-)
This is assuming callcc exists and that the continuation is topic inside it; if that's not a built-in then callcc can no doubt be defined using whatever is available to make continuations.
Enjoy!
my @queue;
sub thread_exit () { shift(@queue)(undef); exit; }
sub thread_new (&code) { push @queue, callcc { unshift @queue, $_; code; thread_exit; } }
sub thread_yield () { if @queue { my $prev = callcc shift @queue; push @queue, $prev if $prev; } }
thread_new { for 1..10 -> $i { print "foo: $i\n"; thread_yield; } }
thread_new { for 1..10 -> $i { print "bar: $i\n"; thread_yield; } }
thread_new { for 1..10 -> $i { print "baz: $i\n"; thread_yield; } }
thread_exit;
-- Matthijs van Duin -- May the Forth be with you!