Class: ProcessShared::BoundedSemaphore
- Inherits:
-
Semaphore
- Object
- AbstractSemaphore
- Semaphore
- ProcessShared::BoundedSemaphore
- Defined in:
- lib/process_shared/bounded_semaphore.rb
Overview
BoundedSemaphore is identical to Semaphore except that its value is not permitted to rise above a maximum. When the value is at the maximum, calls to #post will have no effect.
Class Method Summary collapse
-
.open(maxvalue, value = 1, name = nil, &block) ⇒ Object
With no associated block, open is a synonym for Semaphore.new.
Instance Method Summary collapse
-
#initialize(maxvalue, value = 1, name = nil) ⇒ BoundedSemaphore
constructor
Create a new semaphore with initial value ‘value`.
Methods inherited from Semaphore
Methods inherited from AbstractSemaphore
Methods included from PSem
Methods included from DefineSingletonMethod
Methods included from WithSelf
Constructor Details
#initialize(maxvalue, value = 1, name = nil) ⇒ BoundedSemaphore
Create a new semaphore with initial value ‘value`. After Kernel#fork, the semaphore will be shared across two (or more) processes. The semaphore must be closed with #close in each process that no longer needs the semaphore.
(An object finalizer is registered that will close the semaphore to avoid memory leaks, but this should be considered a last resort).
32 33 34 35 36 |
# File 'lib/process_shared/bounded_semaphore.rb', line 32 def initialize(maxvalue, value = 1, name = nil) init(PSem.sizeof_bsem_t, 'bsem', name) do |sem_name| bsem_open(sem, sem_name, maxvalue, value, err) end end |
Class Method Details
.open(maxvalue, value = 1, name = nil, &block) ⇒ Object
With no associated block, open is a synonym for Semaphore.new. If the optional code block is given, it will be passed ‘sem` as an argument, and the Semaphore object will automatically be closed when the block terminates. In this instance, Semaphore.open returns the value of the block.
17 18 19 |
# File 'lib/process_shared/bounded_semaphore.rb', line 17 def self.open(maxvalue, value = 1, name = nil, &block) new(maxvalue, value, name).with_self(&block) end |