blob: 08a3e5c22357061bc33c9e5e67f21820f1b04ffe (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// expect: 0 3
// a plain global is each actor's own; only a shared variable of a hold block is seen by all
namespace;
include rt, actor;
typecheck on;
let plain = 0;
hold { shared let seen = 0; fn note() { seen++; return seen; } fn seen_now() { return seen; } }
int work(int n) { plain = plain + n; note(); return plain; }
fn main() {
actor.Actor<int,int>* a = rt.new(actor.Actor<int,int>), b = rt.new(actor.Actor<int,int>), c = rt.new(actor.Actor<int,int>);
a.spawn(work); b.spawn(work); c.spawn(work);
a.send(5); b.send(6); c.send(7);
a.recv(fn(int n) { return 0; }); b.recv(fn(int n) { return 0; }); c.recv(fn(int n) { return 0; });
a.await(); b.await(); c.await();
rt.put_n(plain); rt.put_c(' '); rt.put_n(seen_now()); rt.put_c(10);
a.close(); b.close(); c.close();
return 0;
}
|