diff --git a/lib/process_shared/bounded_semaphore.rb b/lib/process_shared/bounded_semaphore.rb deleted file mode 100644 index 6131679..0000000 --- a/lib/process_shared/bounded_semaphore.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'process_shared/psem' -require 'process_shared/semaphore' - -module ProcessShared - # 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 BoundedSemaphore < Semaphore - # 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, BoundedSemaphore.open returns the value of the block. - # - # @param [Integer] value the initial semaphore value - # @param [String] name not currently supported - def self.open(maxvalue, value = 1, name = nil, &block) - new(maxvalue, value, name).with_self(&block) - end - - # 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). - # - # @param [Integer] value the initial semaphore value - # @param [String] name not currently supported - 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 - - protected - - alias_method :psem_unlink, :bsem_unlink - alias_method :psem_close, :bsem_close - alias_method :psem_wait, :bsem_wait - alias_method :psem_post, :bsem_post - alias_method :psem_getvalue, :bsem_getvalue - end -end diff --git a/spec/process_shared/bounded_semaphore_spec.rb b/spec/process_shared/bounded_semaphore_spec.rb deleted file mode 100644 index f996f49..0000000 --- a/spec/process_shared/bounded_semaphore_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'spec_helper' -require 'process_shared/bounded_semaphore' - -module ProcessShared - describe BoundedSemaphore do - it 'never rises above its max value' do - max = 10 - BoundedSemaphore.open(max) do |sem| - pids = [] - 10.times do |i| - pids << fork do - 100.times do - if rand(3) == 0 - sem.wait - else - sem.post - end - end - - exit i - end - end - - 100.times do - sem.value.must be_lte(max) - end - - pids.each { |pid| Process.wait(pid) } - end - end - - describe '#post and #wait' do - it 'increments and decrements the value' do - Semaphore.open(0) do |sem| - 10.times do |i| - sem.post - sem.value.must_equal(i + 1) - end - - 10.times do |i| - sem.wait - sem.value.must_equal(10 - i - 1) - end - end - end - end - end -end