Module: RbbtSemaphore

Defined in:
lib/rbbt/util/semaphore.rb

Class Method Summary collapse

Class Method Details

.fork_each_on_semaphore(elems, size, file = nil) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/rbbt/util/semaphore.rb', line 64

def self.fork_each_on_semaphore(elems, size, file = nil)
  with_semaphore(size, file) do |file|
    pids = elems.collect do |elem| 
      Process.fork do 
        RbbtSemaphore.wait_semaphore(file)
        begin
          yield elem
        ensure
          RbbtSemaphore.post_semaphore(file)
        end
      end
    end
    pids.each do |pid| Process.waitpid pid end
  end
end

.with_semaphore(size, file = nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/rbbt/util/semaphore.rb', line 53

def self.with_semaphore(size, file = nil)
  file = Misc.digest(rand.to_s) if file.nil?
  file.gsub!('/', '_')
  begin
    RbbtSemaphore.create_semaphore(file, size)
    yield file
  ensure
    RbbtSemaphore.delete_semaphore(file)
  end
end