sub down {
use attrs qw(locked method);
my $s = shift;
- cond_wait $s until $$s > 0;
- $$s--;
+ my $inc = @_ ? shift : 1;
+ cond_wait $s until $$s >= $inc;
+ $$s -= $inc;
}
sub up {
use attrs qw(locked method);
my $s = shift;
- $$s++ > 0 and cond_broadcast $s;
+ my $inc = @_ ? shift : 1;
+ ($$s += $inc) > 0 and cond_broadcast $s;
}
1;