Add Thread modules Queue.pm and Semaphore.pm
[p5sagit/p5-mst-13.2.git] / Semaphore.pm
CommitLineData
d21067e0 1package Thread::Semaphore;
2use Thread qw(cond_wait cond_broadcast);
3
4sub new {
5 my $class = shift;
6 my $val = @_ ? shift : 1;
7 bless \$val, $class;
8}
9
10sub down {
11 use attrs qw(locked method);
12 my $s = shift;
13 cond_wait $s until $$s > 0;
14 $$s--;
15}
16
17sub up {
18 use attrs qw(locked method);
19 my $s = shift;
20 $$s++ > 0 and cond_broadcast $s;
21}
22
231;