… | |
… | |
7 | |
7 | |
8 | use Coro; |
8 | use Coro; |
9 | use Coro::Process; |
9 | use Coro::Process; |
10 | use Coro::Semaphore; |
10 | use Coro::Semaphore; |
11 | |
11 | |
12 | my $produced = new Coro::Semaphore; |
12 | my $produced = new Coro::Semaphore 0; |
13 | my $finished = new Coro::Semaphore 0; |
13 | my $finished = new Coro::Semaphore 0; |
14 | |
14 | |
15 | async { |
15 | async { |
16 | for my $i (0..9) { |
16 | for my $i (0..9) { |
17 | print "produced $i\n"; |
17 | print "produced $i\n"; |
… | |
… | |
19 | $produced->up; |
19 | $produced->up; |
20 | yield if @buffer > 5; # simulate memory pressure ;) |
20 | yield if @buffer > 5; # simulate memory pressure ;) |
21 | } |
21 | } |
22 | print "work done\n"; |
22 | print "work done\n"; |
23 | $finished->up; |
23 | $finished->up; |
24 | $idle; |
|
|
25 | }; |
24 | }; |
26 | |
25 | |
27 | async { |
26 | async { |
28 | while () { |
27 | while () { |
29 | $produced->down; |
28 | $produced->down; |