Sha256: b0750ca90db655f04a57fb34708d8cca48f6306d5c7a3b0f9cf05b0ed33f2c50

Contents?: true

Size: 647 Bytes

Versions: 54

Compression:

Stored size: 647 Bytes

Contents

require 'concurrent/atomic/condition'

module Concurrent
  class WaitableList

    def initialize
      @mutex = Mutex.new
      @condition = Condition.new

      @list = []
    end

    def size
      @mutex.synchronize { @list.size }
    end

    def empty?
      @mutex.synchronize { @list.empty? }
    end

    def put(value)
      @mutex.synchronize do
        @list << value
        @condition.signal
      end
    end

    def delete(value)
      @mutex.synchronize { @list.delete(value) }
    end

    def take
      @mutex.synchronize do
        @condition.wait(@mutex) while @list.empty?
        @list.shift
      end
    end

  end
end

Version data entries

54 entries across 54 versions & 1 rubygems

Version Path
concurrent-ruby-0.8.0 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.8.0-java lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2-x86_64-linux lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2-x86-solaris-2.11 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2-x86-mingw32 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2-x86-linux lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2-x64-mingw32 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.2-java lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.8.0.pre2 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.8.0.pre2-java lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.8.0.pre1 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.8.0.pre1-java lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1-x86_64-linux lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1-x86-solaris-2.11 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1-x86-mingw32 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1-x86-linux lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1-x64-mingw32 lib/concurrent/channel/waitable_list.rb
concurrent-ruby-0.7.1-java lib/concurrent/channel/waitable_list.rb