concurrent-ruby 0.7.0.rc0-x86-solaris-2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/LICENSE.txt +21 -0
 - data/README.md +166 -0
 - data/ext/concurrent_ruby_ext/atomic_reference.c +78 -0
 - data/ext/concurrent_ruby_ext/atomic_reference.h +12 -0
 - data/ext/concurrent_ruby_ext/extconf.rb +59 -0
 - data/ext/concurrent_ruby_ext/rb_concurrent.c +28 -0
 - data/lib/concurrent.rb +45 -0
 - data/lib/concurrent/actress.rb +221 -0
 - data/lib/concurrent/actress/ad_hoc.rb +20 -0
 - data/lib/concurrent/actress/context.rb +98 -0
 - data/lib/concurrent/actress/core.rb +228 -0
 - data/lib/concurrent/actress/core_delegations.rb +42 -0
 - data/lib/concurrent/actress/envelope.rb +41 -0
 - data/lib/concurrent/actress/errors.rb +14 -0
 - data/lib/concurrent/actress/reference.rb +64 -0
 - data/lib/concurrent/actress/type_check.rb +48 -0
 - data/lib/concurrent/agent.rb +232 -0
 - data/lib/concurrent/async.rb +319 -0
 - data/lib/concurrent/atomic.rb +46 -0
 - data/lib/concurrent/atomic/atomic_boolean.rb +157 -0
 - data/lib/concurrent/atomic/atomic_fixnum.rb +162 -0
 - data/lib/concurrent/atomic/condition.rb +67 -0
 - data/lib/concurrent/atomic/copy_on_notify_observer_set.rb +118 -0
 - data/lib/concurrent/atomic/copy_on_write_observer_set.rb +117 -0
 - data/lib/concurrent/atomic/count_down_latch.rb +116 -0
 - data/lib/concurrent/atomic/cyclic_barrier.rb +106 -0
 - data/lib/concurrent/atomic/event.rb +98 -0
 - data/lib/concurrent/atomic/thread_local_var.rb +117 -0
 - data/lib/concurrent/atomic_reference/concurrent_update_error.rb +7 -0
 - data/lib/concurrent/atomic_reference/delegated_update.rb +28 -0
 - data/lib/concurrent/atomic_reference/direct_update.rb +28 -0
 - data/lib/concurrent/atomic_reference/jruby.rb +8 -0
 - data/lib/concurrent/atomic_reference/mutex_atomic.rb +47 -0
 - data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +24 -0
 - data/lib/concurrent/atomic_reference/rbx.rb +16 -0
 - data/lib/concurrent/atomic_reference/ruby.rb +16 -0
 - data/lib/concurrent/atomics.rb +10 -0
 - data/lib/concurrent/channel/buffered_channel.rb +85 -0
 - data/lib/concurrent/channel/channel.rb +41 -0
 - data/lib/concurrent/channel/unbuffered_channel.rb +34 -0
 - data/lib/concurrent/channel/waitable_list.rb +40 -0
 - data/lib/concurrent/channels.rb +5 -0
 - data/lib/concurrent/collection/blocking_ring_buffer.rb +71 -0
 - data/lib/concurrent/collection/priority_queue.rb +305 -0
 - data/lib/concurrent/collection/ring_buffer.rb +59 -0
 - data/lib/concurrent/collections.rb +3 -0
 - data/lib/concurrent/configuration.rb +158 -0
 - data/lib/concurrent/dataflow.rb +91 -0
 - data/lib/concurrent/delay.rb +112 -0
 - data/lib/concurrent/dereferenceable.rb +101 -0
 - data/lib/concurrent/errors.rb +30 -0
 - data/lib/concurrent/exchanger.rb +34 -0
 - data/lib/concurrent/executor/cached_thread_pool.rb +44 -0
 - data/lib/concurrent/executor/executor.rb +229 -0
 - data/lib/concurrent/executor/fixed_thread_pool.rb +33 -0
 - data/lib/concurrent/executor/immediate_executor.rb +16 -0
 - data/lib/concurrent/executor/java_cached_thread_pool.rb +31 -0
 - data/lib/concurrent/executor/java_fixed_thread_pool.rb +33 -0
 - data/lib/concurrent/executor/java_single_thread_executor.rb +21 -0
 - data/lib/concurrent/executor/java_thread_pool_executor.rb +187 -0
 - data/lib/concurrent/executor/per_thread_executor.rb +24 -0
 - data/lib/concurrent/executor/ruby_cached_thread_pool.rb +29 -0
 - data/lib/concurrent/executor/ruby_fixed_thread_pool.rb +32 -0
 - data/lib/concurrent/executor/ruby_single_thread_executor.rb +73 -0
 - data/lib/concurrent/executor/ruby_thread_pool_executor.rb +286 -0
 - data/lib/concurrent/executor/ruby_thread_pool_worker.rb +72 -0
 - data/lib/concurrent/executor/safe_task_executor.rb +35 -0
 - data/lib/concurrent/executor/serialized_execution.rb +90 -0
 - data/lib/concurrent/executor/single_thread_executor.rb +35 -0
 - data/lib/concurrent/executor/thread_pool_executor.rb +68 -0
 - data/lib/concurrent/executor/timer_set.rb +143 -0
 - data/lib/concurrent/executors.rb +9 -0
 - data/lib/concurrent/future.rb +124 -0
 - data/lib/concurrent/ivar.rb +111 -0
 - data/lib/concurrent/logging.rb +17 -0
 - data/lib/concurrent/mvar.rb +200 -0
 - data/lib/concurrent/obligation.rb +171 -0
 - data/lib/concurrent/observable.rb +40 -0
 - data/lib/concurrent/options_parser.rb +46 -0
 - data/lib/concurrent/promise.rb +169 -0
 - data/lib/concurrent/scheduled_task.rb +78 -0
 - data/lib/concurrent/supervisor.rb +343 -0
 - data/lib/concurrent/timer_task.rb +341 -0
 - data/lib/concurrent/tvar.rb +252 -0
 - data/lib/concurrent/utilities.rb +3 -0
 - data/lib/concurrent/utility/processor_count.rb +150 -0
 - data/lib/concurrent/utility/timeout.rb +35 -0
 - data/lib/concurrent/utility/timer.rb +21 -0
 - data/lib/concurrent/version.rb +3 -0
 - data/lib/concurrent_ruby.rb +1 -0
 - data/lib/concurrent_ruby_ext.so +0 -0
 - data/lib/extension_helper.rb +9 -0
 - metadata +140 -0
 
| 
         @@ -0,0 +1,150 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rbconfig'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'concurrent/delay'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Concurrent
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              class ProcessorCounter
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @processor_count          = Delay.new { compute_processor_count }
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @physical_processor_count = Delay.new { compute_physical_processor_count }
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                # Number of processors seen by the OS and used for process scheduling. For performance
         
     | 
| 
      
 13 
     | 
    
         
            +
                # reasons the calculated value will be memoized on the first call.
         
     | 
| 
      
 14 
     | 
    
         
            +
                #
         
     | 
| 
      
 15 
     | 
    
         
            +
                # When running under JRuby the Java runtime call `java.lang.Runtime.getRuntime.availableProcessors`
         
     | 
| 
      
 16 
     | 
    
         
            +
                # will be used. According to the Java documentation this "value may change
         
     | 
| 
      
 17 
     | 
    
         
            +
                # during a particular invocation of the virtual machine... [applications]
         
     | 
| 
      
 18 
     | 
    
         
            +
                # should therefore occasionally poll this property." Subsequently the result
         
     | 
| 
      
 19 
     | 
    
         
            +
                # will NOT be memoized under JRuby.
         
     | 
| 
      
 20 
     | 
    
         
            +
                #
         
     | 
| 
      
 21 
     | 
    
         
            +
                # On Windows the Win32 API will be queried for the `NumberOfLogicalProcessors from Win32_Processor`.
         
     | 
| 
      
 22 
     | 
    
         
            +
                # This will return the total number "logical processors for the current instance of the processor",
         
     | 
| 
      
 23 
     | 
    
         
            +
                # which taked into account hyperthreading.
         
     | 
| 
      
 24 
     | 
    
         
            +
                #
         
     | 
| 
      
 25 
     | 
    
         
            +
                # * AIX: /usr/sbin/pmcycles (AIX 5+), /usr/sbin/lsdev
         
     | 
| 
      
 26 
     | 
    
         
            +
                # * BSD: /sbin/sysctl
         
     | 
| 
      
 27 
     | 
    
         
            +
                # * Cygwin: /proc/cpuinfo
         
     | 
| 
      
 28 
     | 
    
         
            +
                # * Darwin: /usr/bin/hwprefs, /usr/sbin/sysctl
         
     | 
| 
      
 29 
     | 
    
         
            +
                # * HP-UX: /usr/sbin/ioscan
         
     | 
| 
      
 30 
     | 
    
         
            +
                # * IRIX: /usr/sbin/sysconf
         
     | 
| 
      
 31 
     | 
    
         
            +
                # * Linux: /proc/cpuinfo
         
     | 
| 
      
 32 
     | 
    
         
            +
                # * Minix 3+: /proc/cpuinfo
         
     | 
| 
      
 33 
     | 
    
         
            +
                # * Solaris: /usr/sbin/psrinfo
         
     | 
| 
      
 34 
     | 
    
         
            +
                # * Tru64 UNIX: /usr/sbin/psrinfo
         
     | 
| 
      
 35 
     | 
    
         
            +
                # * UnixWare: /usr/sbin/psrinfo
         
     | 
| 
      
 36 
     | 
    
         
            +
                #
         
     | 
| 
      
 37 
     | 
    
         
            +
                # @return [Integer] number of processors seen by the OS or Java runtime
         
     | 
| 
      
 38 
     | 
    
         
            +
                #
         
     | 
| 
      
 39 
     | 
    
         
            +
                # @see https://github.com/grosser/parallel/blob/4fc8b89d08c7091fe0419ca8fba1ec3ce5a8d185/lib/parallel.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
                #
         
     | 
| 
      
 41 
     | 
    
         
            +
                # @see http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#availableProcessors()
         
     | 
| 
      
 42 
     | 
    
         
            +
                # @see http://msdn.microsoft.com/en-us/library/aa394373(v=vs.85).aspx
         
     | 
| 
      
 43 
     | 
    
         
            +
                def processor_count
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @processor_count.value
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                # Number of physical processor cores on the current system. For performance reasons
         
     | 
| 
      
 48 
     | 
    
         
            +
                # the calculated value will be memoized on the first call.
         
     | 
| 
      
 49 
     | 
    
         
            +
                #
         
     | 
| 
      
 50 
     | 
    
         
            +
                # On Windows the Win32 API will be queried for the `NumberOfCores from Win32_Processor`.
         
     | 
| 
      
 51 
     | 
    
         
            +
                # This will return the total number "of cores for the current instance of the processor."
         
     | 
| 
      
 52 
     | 
    
         
            +
                # On Unix-like operating systems either the `hwprefs` or `sysctl` utility will be called
         
     | 
| 
      
 53 
     | 
    
         
            +
                # in a subshell and the returned value will be used. In the rare case where none of these
         
     | 
| 
      
 54 
     | 
    
         
            +
                # methods work or an exception is raised the function will simply return 1.
         
     | 
| 
      
 55 
     | 
    
         
            +
                #
         
     | 
| 
      
 56 
     | 
    
         
            +
                # @return [Integer] number physical processor cores on the current system
         
     | 
| 
      
 57 
     | 
    
         
            +
                #
         
     | 
| 
      
 58 
     | 
    
         
            +
                # @see https://github.com/grosser/parallel/blob/4fc8b89d08c7091fe0419ca8fba1ec3ce5a8d185/lib/parallel.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
                #
         
     | 
| 
      
 60 
     | 
    
         
            +
                # @see http://msdn.microsoft.com/en-us/library/aa394373(v=vs.85).aspx
         
     | 
| 
      
 61 
     | 
    
         
            +
                # @see http://www.unix.com/man-page/osx/1/HWPREFS/
         
     | 
| 
      
 62 
     | 
    
         
            +
                # @see http://linux.die.net/man/8/sysctl
         
     | 
| 
      
 63 
     | 
    
         
            +
                def physical_processor_count
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @physical_processor_count.value
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                private
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                def compute_processor_count
         
     | 
| 
      
 70 
     | 
    
         
            +
                  if RUBY_PLATFORM == 'java'
         
     | 
| 
      
 71 
     | 
    
         
            +
                    java.lang.Runtime.getRuntime.availableProcessors
         
     | 
| 
      
 72 
     | 
    
         
            +
                  else
         
     | 
| 
      
 73 
     | 
    
         
            +
                    os_name = RbConfig::CONFIG["target_os"]
         
     | 
| 
      
 74 
     | 
    
         
            +
                    if os_name =~ /mingw|mswin/
         
     | 
| 
      
 75 
     | 
    
         
            +
                      require 'win32ole'
         
     | 
| 
      
 76 
     | 
    
         
            +
                      result = WIN32OLE.connect("winmgmts://").ExecQuery(
         
     | 
| 
      
 77 
     | 
    
         
            +
                          "select NumberOfLogicalProcessors from Win32_Processor")
         
     | 
| 
      
 78 
     | 
    
         
            +
                      result.to_enum.collect(&:NumberOfLogicalProcessors).reduce(:+)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    elsif File.readable?("/proc/cpuinfo")
         
     | 
| 
      
 80 
     | 
    
         
            +
                      IO.read("/proc/cpuinfo").scan(/^processor/).size
         
     | 
| 
      
 81 
     | 
    
         
            +
                    elsif File.executable?("/usr/bin/hwprefs")
         
     | 
| 
      
 82 
     | 
    
         
            +
                      IO.popen("/usr/bin/hwprefs thread_count").read.to_i
         
     | 
| 
      
 83 
     | 
    
         
            +
                    elsif File.executable?("/usr/sbin/psrinfo")
         
     | 
| 
      
 84 
     | 
    
         
            +
                      IO.popen("/usr/sbin/psrinfo").read.scan(/^.*on-*line/).size
         
     | 
| 
      
 85 
     | 
    
         
            +
                    elsif File.executable?("/usr/sbin/ioscan")
         
     | 
| 
      
 86 
     | 
    
         
            +
                      IO.popen("/usr/sbin/ioscan -kC processor") do |out|
         
     | 
| 
      
 87 
     | 
    
         
            +
                        out.read.scan(/^.*processor/).size
         
     | 
| 
      
 88 
     | 
    
         
            +
                      end
         
     | 
| 
      
 89 
     | 
    
         
            +
                    elsif File.executable?("/usr/sbin/pmcycles")
         
     | 
| 
      
 90 
     | 
    
         
            +
                      IO.popen("/usr/sbin/pmcycles -m").read.count("\n")
         
     | 
| 
      
 91 
     | 
    
         
            +
                    elsif File.executable?("/usr/sbin/lsdev")
         
     | 
| 
      
 92 
     | 
    
         
            +
                      IO.popen("/usr/sbin/lsdev -Cc processor -S 1").read.count("\n")
         
     | 
| 
      
 93 
     | 
    
         
            +
                    elsif File.executable?("/usr/sbin/sysconf") and os_name =~ /irix/i
         
     | 
| 
      
 94 
     | 
    
         
            +
                      IO.popen("/usr/sbin/sysconf NPROC_ONLN").read.to_i
         
     | 
| 
      
 95 
     | 
    
         
            +
                    elsif File.executable?("/usr/sbin/sysctl")
         
     | 
| 
      
 96 
     | 
    
         
            +
                      IO.popen("/usr/sbin/sysctl -n hw.ncpu").read.to_i
         
     | 
| 
      
 97 
     | 
    
         
            +
                    elsif File.executable?("/sbin/sysctl")
         
     | 
| 
      
 98 
     | 
    
         
            +
                      IO.popen("/sbin/sysctl -n hw.ncpu").read.to_i
         
     | 
| 
      
 99 
     | 
    
         
            +
                    else
         
     | 
| 
      
 100 
     | 
    
         
            +
                      1
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
                  end
         
     | 
| 
      
 103 
     | 
    
         
            +
                rescue
         
     | 
| 
      
 104 
     | 
    
         
            +
                  return 1
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                def compute_physical_processor_count
         
     | 
| 
      
 108 
     | 
    
         
            +
                  ppc = case RbConfig::CONFIG["target_os"]
         
     | 
| 
      
 109 
     | 
    
         
            +
                        when /darwin1/
         
     | 
| 
      
 110 
     | 
    
         
            +
                          IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i
         
     | 
| 
      
 111 
     | 
    
         
            +
                        when /linux/
         
     | 
| 
      
 112 
     | 
    
         
            +
                          cores = {} # unique physical ID / core ID combinations
         
     | 
| 
      
 113 
     | 
    
         
            +
                          phy   = 0
         
     | 
| 
      
 114 
     | 
    
         
            +
                          IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln|
         
     | 
| 
      
 115 
     | 
    
         
            +
                            if ln.start_with?("physical")
         
     | 
| 
      
 116 
     | 
    
         
            +
                              phy = ln[/\d+/]
         
     | 
| 
      
 117 
     | 
    
         
            +
                            elsif ln.start_with?("core")
         
     | 
| 
      
 118 
     | 
    
         
            +
                              cid        = phy + ":" + ln[/\d+/]
         
     | 
| 
      
 119 
     | 
    
         
            +
                              cores[cid] = true if not cores[cid]
         
     | 
| 
      
 120 
     | 
    
         
            +
                            end
         
     | 
| 
      
 121 
     | 
    
         
            +
                          end
         
     | 
| 
      
 122 
     | 
    
         
            +
                          cores.count
         
     | 
| 
      
 123 
     | 
    
         
            +
                        when /mswin|mingw/
         
     | 
| 
      
 124 
     | 
    
         
            +
                          require 'win32ole'
         
     | 
| 
      
 125 
     | 
    
         
            +
                          result_set = WIN32OLE.connect("winmgmts://").ExecQuery(
         
     | 
| 
      
 126 
     | 
    
         
            +
                              "select NumberOfCores from Win32_Processor")
         
     | 
| 
      
 127 
     | 
    
         
            +
                          result_set.to_enum.collect(&:NumberOfCores).reduce(:+)
         
     | 
| 
      
 128 
     | 
    
         
            +
                        else
         
     | 
| 
      
 129 
     | 
    
         
            +
                          processor_count
         
     | 
| 
      
 130 
     | 
    
         
            +
                        end
         
     | 
| 
      
 131 
     | 
    
         
            +
                  # fall back to logical count if physical info is invalid
         
     | 
| 
      
 132 
     | 
    
         
            +
                  ppc > 0 ? ppc : processor_count
         
     | 
| 
      
 133 
     | 
    
         
            +
                rescue
         
     | 
| 
      
 134 
     | 
    
         
            +
                  return 1
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
              end
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
              # create the default ProcessorCounter on load
         
     | 
| 
      
 139 
     | 
    
         
            +
              @processor_counter = ProcessorCounter.new
         
     | 
| 
      
 140 
     | 
    
         
            +
              singleton_class.send :attr_reader, :processor_counter
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
              def self.processor_count
         
     | 
| 
      
 143 
     | 
    
         
            +
                processor_counter.processor_count
         
     | 
| 
      
 144 
     | 
    
         
            +
              end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
              def self.physical_processor_count
         
     | 
| 
      
 147 
     | 
    
         
            +
                processor_counter.physical_processor_count
         
     | 
| 
      
 148 
     | 
    
         
            +
              end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rbconfig'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'thread'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'concurrent/errors'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Concurrent
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              # Wait the given number of seconds for the block operation to complete.
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              # @param [Integer] seconds The number of seconds to wait
         
     | 
| 
      
 11 
     | 
    
         
            +
              #
         
     | 
| 
      
 12 
     | 
    
         
            +
              # @return [Object] The result of the block operation
         
     | 
| 
      
 13 
     | 
    
         
            +
              #
         
     | 
| 
      
 14 
     | 
    
         
            +
              # @raise [Concurrent::TimeoutError] when the block operation does not complete
         
     | 
| 
      
 15 
     | 
    
         
            +
              #   in the allotted number of seconds.
         
     | 
| 
      
 16 
     | 
    
         
            +
              #
         
     | 
| 
      
 17 
     | 
    
         
            +
              # @note This method is intended to be a simpler and more reliable replacement
         
     | 
| 
      
 18 
     | 
    
         
            +
              # to the Ruby standard library `Timeout::timeout` method.
         
     | 
| 
      
 19 
     | 
    
         
            +
              def timeout(seconds)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                thread = Thread.new do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  Thread.current[:result] = yield
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                success = thread.join(seconds)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                if success
         
     | 
| 
      
 27 
     | 
    
         
            +
                  return thread[:result]
         
     | 
| 
      
 28 
     | 
    
         
            +
                else
         
     | 
| 
      
 29 
     | 
    
         
            +
                  raise TimeoutError
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              ensure
         
     | 
| 
      
 32 
     | 
    
         
            +
                Thread.kill(thread) unless thread.nil?
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
              module_function :timeout
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'concurrent/configuration'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'thread'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Concurrent
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              # Perform the given operation asynchronously after the given number of seconds.
         
     | 
| 
      
 7 
     | 
    
         
            +
              #
         
     | 
| 
      
 8 
     | 
    
         
            +
              # @param [Fixnum] seconds the interval in seconds to wait before executing the task
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              # @yield the task to execute
         
     | 
| 
      
 11 
     | 
    
         
            +
              #
         
     | 
| 
      
 12 
     | 
    
         
            +
              # @return [Boolean] true
         
     | 
| 
      
 13 
     | 
    
         
            +
              def timer(seconds, *args, &block)
         
     | 
| 
      
 14 
     | 
    
         
            +
                raise ArgumentError.new('no block given') unless block_given?
         
     | 
| 
      
 15 
     | 
    
         
            +
                raise ArgumentError.new('interval must be greater than or equal to zero') if seconds < 0
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                Concurrent.configuration.global_timer_set.post(seconds, *args, &block)
         
     | 
| 
      
 18 
     | 
    
         
            +
                true
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              module_function :timer
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'concurrent'
         
     | 
| 
         Binary file 
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,140 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: concurrent-ruby
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.7.0.rc0
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: x86-solaris-2.11
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Jerry D'Antonio
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-06-18 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies: []
         
     | 
| 
      
 13 
     | 
    
         
            +
            description: |2
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
         
     | 
| 
      
 15 
     | 
    
         
            +
                  Inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency patterns.
         
     | 
| 
      
 16 
     | 
    
         
            +
            email: jerry.dantonio@gmail.com
         
     | 
| 
      
 17 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 18 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 19 
     | 
    
         
            +
            extra_rdoc_files:
         
     | 
| 
      
 20 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 21 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 22 
     | 
    
         
            +
            files:
         
     | 
| 
      
 23 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 24 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 25 
     | 
    
         
            +
            - ext/concurrent_ruby_ext/atomic_reference.c
         
     | 
| 
      
 26 
     | 
    
         
            +
            - ext/concurrent_ruby_ext/atomic_reference.h
         
     | 
| 
      
 27 
     | 
    
         
            +
            - ext/concurrent_ruby_ext/extconf.rb
         
     | 
| 
      
 28 
     | 
    
         
            +
            - ext/concurrent_ruby_ext/rb_concurrent.c
         
     | 
| 
      
 29 
     | 
    
         
            +
            - lib/concurrent.rb
         
     | 
| 
      
 30 
     | 
    
         
            +
            - lib/concurrent/actress.rb
         
     | 
| 
      
 31 
     | 
    
         
            +
            - lib/concurrent/actress/ad_hoc.rb
         
     | 
| 
      
 32 
     | 
    
         
            +
            - lib/concurrent/actress/context.rb
         
     | 
| 
      
 33 
     | 
    
         
            +
            - lib/concurrent/actress/core.rb
         
     | 
| 
      
 34 
     | 
    
         
            +
            - lib/concurrent/actress/core_delegations.rb
         
     | 
| 
      
 35 
     | 
    
         
            +
            - lib/concurrent/actress/envelope.rb
         
     | 
| 
      
 36 
     | 
    
         
            +
            - lib/concurrent/actress/errors.rb
         
     | 
| 
      
 37 
     | 
    
         
            +
            - lib/concurrent/actress/reference.rb
         
     | 
| 
      
 38 
     | 
    
         
            +
            - lib/concurrent/actress/type_check.rb
         
     | 
| 
      
 39 
     | 
    
         
            +
            - lib/concurrent/agent.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
            - lib/concurrent/async.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
            - lib/concurrent/atomic.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            - lib/concurrent/atomic/atomic_boolean.rb
         
     | 
| 
      
 43 
     | 
    
         
            +
            - lib/concurrent/atomic/atomic_fixnum.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            - lib/concurrent/atomic/condition.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            - lib/concurrent/atomic/copy_on_notify_observer_set.rb
         
     | 
| 
      
 46 
     | 
    
         
            +
            - lib/concurrent/atomic/copy_on_write_observer_set.rb
         
     | 
| 
      
 47 
     | 
    
         
            +
            - lib/concurrent/atomic/count_down_latch.rb
         
     | 
| 
      
 48 
     | 
    
         
            +
            - lib/concurrent/atomic/cyclic_barrier.rb
         
     | 
| 
      
 49 
     | 
    
         
            +
            - lib/concurrent/atomic/event.rb
         
     | 
| 
      
 50 
     | 
    
         
            +
            - lib/concurrent/atomic/thread_local_var.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/concurrent_update_error.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/delegated_update.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/direct_update.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/jruby.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/mutex_atomic.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/numeric_cas_wrapper.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/rbx.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/concurrent/atomic_reference/ruby.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/concurrent/atomics.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/concurrent/channel/buffered_channel.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/concurrent/channel/channel.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/concurrent/channel/unbuffered_channel.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/concurrent/channel/waitable_list.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/concurrent/channels.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/concurrent/collection/blocking_ring_buffer.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/concurrent/collection/priority_queue.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib/concurrent/collection/ring_buffer.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/concurrent/collections.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - lib/concurrent/configuration.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - lib/concurrent/dataflow.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/concurrent/delay.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - lib/concurrent/dereferenceable.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            - lib/concurrent/errors.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/concurrent/exchanger.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib/concurrent/executor/cached_thread_pool.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - lib/concurrent/executor/executor.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/concurrent/executor/fixed_thread_pool.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/concurrent/executor/immediate_executor.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - lib/concurrent/executor/java_cached_thread_pool.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - lib/concurrent/executor/java_fixed_thread_pool.rb
         
     | 
| 
      
 81 
     | 
    
         
            +
            - lib/concurrent/executor/java_single_thread_executor.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - lib/concurrent/executor/java_thread_pool_executor.rb
         
     | 
| 
      
 83 
     | 
    
         
            +
            - lib/concurrent/executor/per_thread_executor.rb
         
     | 
| 
      
 84 
     | 
    
         
            +
            - lib/concurrent/executor/ruby_cached_thread_pool.rb
         
     | 
| 
      
 85 
     | 
    
         
            +
            - lib/concurrent/executor/ruby_fixed_thread_pool.rb
         
     | 
| 
      
 86 
     | 
    
         
            +
            - lib/concurrent/executor/ruby_single_thread_executor.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - lib/concurrent/executor/ruby_thread_pool_executor.rb
         
     | 
| 
      
 88 
     | 
    
         
            +
            - lib/concurrent/executor/ruby_thread_pool_worker.rb
         
     | 
| 
      
 89 
     | 
    
         
            +
            - lib/concurrent/executor/safe_task_executor.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - lib/concurrent/executor/serialized_execution.rb
         
     | 
| 
      
 91 
     | 
    
         
            +
            - lib/concurrent/executor/single_thread_executor.rb
         
     | 
| 
      
 92 
     | 
    
         
            +
            - lib/concurrent/executor/thread_pool_executor.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - lib/concurrent/executor/timer_set.rb
         
     | 
| 
      
 94 
     | 
    
         
            +
            - lib/concurrent/executors.rb
         
     | 
| 
      
 95 
     | 
    
         
            +
            - lib/concurrent/future.rb
         
     | 
| 
      
 96 
     | 
    
         
            +
            - lib/concurrent/ivar.rb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - lib/concurrent/logging.rb
         
     | 
| 
      
 98 
     | 
    
         
            +
            - lib/concurrent/mvar.rb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - lib/concurrent/obligation.rb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - lib/concurrent/observable.rb
         
     | 
| 
      
 101 
     | 
    
         
            +
            - lib/concurrent/options_parser.rb
         
     | 
| 
      
 102 
     | 
    
         
            +
            - lib/concurrent/promise.rb
         
     | 
| 
      
 103 
     | 
    
         
            +
            - lib/concurrent/scheduled_task.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - lib/concurrent/supervisor.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
            - lib/concurrent/timer_task.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
            - lib/concurrent/tvar.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            - lib/concurrent/utilities.rb
         
     | 
| 
      
 108 
     | 
    
         
            +
            - lib/concurrent/utility/processor_count.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - lib/concurrent/utility/timeout.rb
         
     | 
| 
      
 110 
     | 
    
         
            +
            - lib/concurrent/utility/timer.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - lib/concurrent/version.rb
         
     | 
| 
      
 112 
     | 
    
         
            +
            - lib/concurrent_ruby.rb
         
     | 
| 
      
 113 
     | 
    
         
            +
            - lib/concurrent_ruby_ext.so
         
     | 
| 
      
 114 
     | 
    
         
            +
            - lib/extension_helper.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
            homepage: http://www.concurrent-ruby.com
         
     | 
| 
      
 116 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 117 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 118 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 119 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 120 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 121 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 122 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 123 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 124 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 125 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 126 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 127 
     | 
    
         
            +
                  version: 1.9.3
         
     | 
| 
      
 128 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 129 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 130 
     | 
    
         
            +
              - - ">"
         
     | 
| 
      
 131 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 132 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
      
 133 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 134 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 135 
     | 
    
         
            +
            rubygems_version: 2.2.2
         
     | 
| 
      
 136 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 137 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 138 
     | 
    
         
            +
            summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell,
         
     | 
| 
      
 139 
     | 
    
         
            +
              F#, C#, Java, and classic concurrency patterns.
         
     | 
| 
      
 140 
     | 
    
         
            +
            test_files: []
         
     |