… | |
… | |
107 | |
107 | |
108 | =cut |
108 | =cut |
109 | |
109 | |
110 | sub up { |
110 | sub up { |
111 | my $sem = $_[0][1]{$_[1]}; |
111 | my $sem = $_[0][1]{$_[1]}; |
|
|
112 | |
112 | if (++$sem->[0] > 0) { |
113 | if (++$sem->[0] > 0) { |
113 | (shift @{$sem->[1]})->ready if @{$sem->[1]}; |
114 | (shift @{$sem->[1]})->ready if @{$sem->[1]}; |
114 | } |
115 | } |
|
|
116 | |
115 | delete $_[0][1]{$_[1]} if $sem->[0] == $_[0][0] && !@{$sem->[1] || []} |
117 | delete $_[0][1]{$_[1]} if $sem->[0] == $_[0][0] && !@{$sem->[1] || []}; |
116 | } |
118 | } |
117 | |
119 | |
118 | =item $sem->try |
120 | =item $sem->try |
119 | |
121 | |
120 | Try to C<down> the semaphore. Returns true when this was possible, |
122 | Try to C<down> the semaphore. Returns true when this was possible, |