Module: RbbtSemaphore
- Defined in:
- lib/rbbt/util/semaphore.rb
Class Method Summary collapse
- .fork_each_on_semaphore(elems, size, file = nil) ⇒ Object
- .with_semaphore(size, file = nil) ⇒ Object
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 |