Metered concurrency: Difference between revisions
Rename Perl 6 -> Raku, alphabetize, minor clean-up
Thundergnat (talk | contribs) (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>
(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}}
|