Metered concurrency: Difference between revisions

m (→‎{{header|Logtalk}}: Add note on dependency)
Line 1,022:
=={{header|Perl}}==
See [http://search.cpan.org/dist/Coro/Coro/Semaphore.pm Coro::Semaphore].
=={{header|Perl 6}}==
{{works with|Rakudo/JVM|2013-11-24}}
Uses a buffered channel to hand out a limited number of tickets.
<lang perl6>class Semaphor {
has $.tickets = Channel.new;
method new ($max) {
my $s = self.bless;
$s.tickets.send(True) for ^$max;
$s;
}
method acquire { $.tickets.receive }
method release { $.tickets.send(True) }
}
 
sub MAIN ($units = 5, $max = 2) {
my $sem = Semaphor.new($max);
 
my @units = do for ^$units -> $u {
start {
$sem.acquire; say "unit $u acquired";
sleep 2;
$sem.release; say "unit $u released";
}
}
await @units;
}</lang>
{{out}}
<pre>unit 0 acquired
unit 1 acquired
unit 0 released
unit 1 released
unit 3 acquired
unit 2 acquired
unit 3 released
unit 2 released
unit 4 acquired
unit 4 released</pre>
 
=={{header|PicoLisp}}==
Anonymous user