Metered concurrency: Difference between revisions

Rename Perl 6 -> Raku, alphabetize, minor clean-up
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 362:
done.acquire;
}</lang>
 
=={{header|E}}==
This semaphore slightly differs from the task description; the release operation is not on the semaphore itself but given out with each acquisition, and cannot be invoked too many times.
Line 866 ⟶ 867:
->
</pre>
 
 
=={{header|Java}}==
Line 964:
Done.
</pre>
 
 
=={{header|Kotlin}}==
Line 1,189 ⟶ 1,188:
=={{header|Perl}}==
See [http://search.cpan.org/dist/Coro/Coro/Semaphore.pm Coro::Semaphore].
=={{header|Perl 6}}==
Uses a buffered channel to hand out a limited number of tickets.
<lang perl6>class Semaphore {
has $.tickets = Channel.new;
method new ($max) {
my $s = self.bless;
$s.tickets.send(True) xx $max;
$s;
}
method acquire { $.tickets.receive }
method release { $.tickets.send(True) }
 
sub MAIN ($units = 5, $max = 2) {
my $sem = Semaphore.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|Phix}}==
Line 1,437 ⟶ 1,400:
(semaphore-post sema)))))
</lang>
 
=={{header|Perl 6Raku}}==
(formerly Perl 6)
Uses a buffered channel to hand out a limited number of tickets.
<lang perl6>class Semaphore {
has $.tickets = Channel.new;
method new ($max) {
my $s = self.bless;
$s.tickets.send(True) xx $max;
$s;
}
method acquire { $.tickets.receive }
method release { $.tickets.send(True) }
 
sub MAIN ($units = 5, $max = 2) {
my $sem = Semaphore.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|Raven}}==
Line 1,543 ⟶ 1,544:
}
}</lang>
 
=={{header|Tcl}}==
{{works with|Tcl|8.6}}
10,333

edits