Sha256: b804f6e1a1bb989213d1cb047c06739dafa55e9a52f2d9aee10039f99daf8571

Contents?: true

Size: 399 Bytes

Versions: 2

Compression:

Stored size: 399 Bytes

Contents

require 'monitor'

module Tusk
  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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tusk-1.1.0 lib/tusk/latch.rb
tusk-1.0.0 lib/tusk/latch.rb