#include #include $proc procs[4]; $scope scopes[4]; int min(int a, int b) { if (a < b) return a; else return b; } int minDouble(int (*f)(int, int), int a, int b) { int result; result = f(a, b); return result * 2; } $proc proc_create(void (*f)(int), int x){ $proc p = $spawn f(x); return p; } void foo(int id) { printf("I'm spawned with id %d.\n", id); $assert(procs[id] == $self); scopes[id] = $here; if($scope_defined(scopes[id])) printf("I own scope with id %d.\n", scopes[id]); else printf("Error: my scope is gone!\n"); } void main(){ int k = minDouble(min, 5, 8); for(int i = 0; i < 4; i++){ procs[i] = proc_create(foo, i); } for(int i = 0; i < 4; i++){ $wait(procs[i]); printf("Process %d terminates.\n", i); if($proc_defined(procs[i])) printf("Process %d is not removed!\n", i); else printf("Process %d now has invalid reference: %d\n", i, procs[i]); } }