From af0a9f9eefaee3a8120cfd8d05cbc431af376da3 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Sun, 29 Jul 2012 17:26:07 -0700 Subject: added live responses which can be written and read in separate threads --- .../lib/active_support/concurrency/latch.rb | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 activesupport/lib/active_support/concurrency/latch.rb (limited to 'activesupport') diff --git a/activesupport/lib/active_support/concurrency/latch.rb b/activesupport/lib/active_support/concurrency/latch.rb new file mode 100644 index 0000000000..1507de433e --- /dev/null +++ b/activesupport/lib/active_support/concurrency/latch.rb @@ -0,0 +1,27 @@ +require 'thread' +require 'monitor' + +module ActiveSupport + module Concurrency + class Latch + def initialize(count = 1) + @count = count + @lock = Monitor.new + @cv = @lock.new_cond + end + + def release + @lock.synchronize do + @count -= 1 if @count > 0 + @cv.broadcast if @count.zero? + end + end + + def await + @lock.synchronize do + @cv.wait_while { @count > 0 } + end + end + end + end +end -- cgit v1.2.3