El módulo Coro::Semaphore proporciona objetos semáforos con contador. El contador indica el número de de corutinas clientes que pueden compartir el recurso antes de que se bloquee.
pp2@nereida:~/src/perl/coro$ cat -n prodconssemaphor.pl
 1  #!/usr/bin/perl
 2  use warnings;
 3  use strict;
 4
 5  use Coro;
 6  use Coro::Semaphore;
 7
 8  my @buffer;
 9
10  my $produced = Coro::Semaphore->new(0);
11  my $finished = Coro::Semaphore->new(0);
12
13  async {
14    for my $i (0..9) {
15      print "Produced $i\n";
16      push @buffer, $i;
17      $produced->up;
18      cede if @buffer > 5;
19    }
20
21    print "Work done\n";
22    $finished->up;
23  };
24
25  async {
26    while () {
27      $produced->down;
28      my $i = shift @buffer;
29      print "Consumed $i\n";
30    }
31  };
32
33  $finished->down;
34
35  print "Job finished\n";
pp2@nereida:~/src/perl/coro$ prodconssemaphor.pl Produced 0 Produced 1 Produced 2 Produced 3 Produced 4 Produced 5 Consumed 0 Consumed 1 Consumed 2 Consumed 3 Consumed 4 Consumed 5 Produced 6 Produced 7 Produced 8 Produced 9 Work done Consumed 6 Consumed 7 Consumed 8 Consumed 9 Job finished
Casiano Rodríguez León
