concurrent-ruby 1.0.5 → 1.1.0.pre1
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 +5 -5
- data/CHANGELOG.md +42 -0
- data/Gemfile +39 -0
- data/{LICENSE.txt → LICENSE.md} +2 -0
- data/README.md +203 -105
- data/Rakefile +278 -0
- data/ext/concurrent-ruby/ConcurrentRubyService.java +17 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java +175 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java +248 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java +93 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java +113 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java +159 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java +304 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java +31 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java +3863 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java +203 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java +342 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java +3800 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java +204 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java +291 -0
- data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java +199 -0
- data/lib/concurrent-ruby.rb +1 -0
- data/lib/concurrent.rb +24 -20
- data/lib/concurrent/agent.rb +7 -7
- data/lib/concurrent/array.rb +59 -32
- data/lib/concurrent/async.rb +4 -4
- data/lib/concurrent/atom.rb +9 -9
- data/lib/concurrent/atomic/atomic_boolean.rb +24 -20
- data/lib/concurrent/atomic/atomic_fixnum.rb +27 -23
- data/lib/concurrent/atomic/atomic_markable_reference.rb +164 -0
- data/lib/concurrent/atomic/atomic_reference.rb +176 -33
- data/lib/concurrent/atomic/count_down_latch.rb +6 -6
- data/lib/concurrent/atomic/cyclic_barrier.rb +1 -1
- data/lib/concurrent/atomic/event.rb +1 -1
- data/lib/concurrent/atomic/java_count_down_latch.rb +6 -5
- data/lib/concurrent/atomic/mutex_count_down_latch.rb +1 -0
- data/lib/concurrent/atomic/read_write_lock.rb +2 -1
- data/lib/concurrent/atomic/reentrant_read_write_lock.rb +3 -1
- data/lib/concurrent/atomic/semaphore.rb +8 -8
- data/lib/concurrent/atomic/thread_local_var.rb +7 -7
- data/lib/concurrent/atomic_reference/mutex_atomic.rb +3 -8
- data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +1 -1
- data/lib/concurrent/atomics.rb +0 -43
- data/lib/concurrent/collection/lock_free_stack.rb +127 -0
- data/lib/concurrent/collection/map/atomic_reference_map_backend.rb +3 -3
- data/lib/concurrent/collection/map/non_concurrent_map_backend.rb +1 -2
- data/lib/concurrent/collection/non_concurrent_priority_queue.rb +29 -29
- data/lib/concurrent/concern/dereferenceable.rb +1 -1
- data/lib/concurrent/concern/logging.rb +6 -1
- data/lib/concurrent/concern/observable.rb +7 -7
- data/lib/concurrent/concurrent_ruby.jar +0 -0
- data/lib/concurrent/configuration.rb +1 -6
- data/lib/concurrent/constants.rb +1 -1
- data/lib/concurrent/dataflow.rb +2 -1
- data/lib/concurrent/delay.rb +9 -7
- data/lib/concurrent/exchanger.rb +13 -21
- data/lib/concurrent/executor/abstract_executor_service.rb +2 -2
- data/lib/concurrent/executor/cached_thread_pool.rb +1 -1
- data/lib/concurrent/executor/executor_service.rb +15 -15
- data/lib/concurrent/executor/fixed_thread_pool.rb +18 -18
- data/lib/concurrent/executor/java_thread_pool_executor.rb +10 -7
- data/lib/concurrent/executor/single_thread_executor.rb +2 -2
- data/lib/concurrent/executor/thread_pool_executor.rb +6 -6
- data/lib/concurrent/executor/timer_set.rb +1 -1
- data/lib/concurrent/future.rb +4 -1
- data/lib/concurrent/hash.rb +53 -30
- data/lib/concurrent/ivar.rb +5 -6
- data/lib/concurrent/map.rb +20 -25
- data/lib/concurrent/maybe.rb +1 -1
- data/lib/concurrent/mutable_struct.rb +15 -14
- data/lib/concurrent/mvar.rb +2 -2
- data/lib/concurrent/promise.rb +53 -21
- data/lib/concurrent/promises.rb +1938 -0
- data/lib/concurrent/re_include.rb +58 -0
- data/lib/concurrent/set.rb +66 -0
- data/lib/concurrent/settable_struct.rb +1 -0
- data/lib/concurrent/synchronization.rb +4 -5
- data/lib/concurrent/synchronization/abstract_lockable_object.rb +5 -5
- data/lib/concurrent/synchronization/abstract_struct.rb +6 -4
- data/lib/concurrent/synchronization/lockable_object.rb +6 -6
- data/lib/concurrent/synchronization/{mri_lockable_object.rb → mutex_lockable_object.rb} +19 -14
- data/lib/concurrent/synchronization/object.rb +8 -4
- data/lib/concurrent/synchronization/truffleruby_object.rb +46 -0
- data/lib/concurrent/synchronization/volatile.rb +11 -9
- data/lib/concurrent/thread_safe/util/data_structures.rb +55 -0
- data/lib/concurrent/thread_safe/util/striped64.rb +9 -4
- data/lib/concurrent/timer_task.rb +5 -2
- data/lib/concurrent/tuple.rb +1 -1
- data/lib/concurrent/tvar.rb +2 -2
- data/lib/concurrent/utility/at_exit.rb +1 -1
- data/lib/concurrent/utility/engine.rb +2 -2
- data/lib/concurrent/utility/monotonic_time.rb +3 -3
- data/lib/concurrent/utility/native_extension_loader.rb +31 -33
- data/lib/concurrent/utility/processor_counter.rb +0 -2
- data/lib/concurrent/version.rb +2 -2
- metadata +35 -21
- data/lib/concurrent/atomic_reference/concurrent_update_error.rb +0 -8
- data/lib/concurrent/atomic_reference/direct_update.rb +0 -81
- data/lib/concurrent/atomic_reference/jruby+truffle.rb +0 -2
- data/lib/concurrent/atomic_reference/jruby.rb +0 -16
- data/lib/concurrent/atomic_reference/rbx.rb +0 -22
- data/lib/concurrent/atomic_reference/ruby.rb +0 -32
- data/lib/concurrent/edge.rb +0 -26
- data/lib/concurrent/lazy_register.rb +0 -81
- data/lib/concurrent/synchronization/truffle_lockable_object.rb +0 -9
- data/lib/concurrent/synchronization/truffle_object.rb +0 -31
- data/lib/concurrent/thread_safe/util/array_hash_rbx.rb +0 -30
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'concurrent/thread_safe/util'
|
2
|
+
|
3
|
+
module Concurrent
|
4
|
+
module ThreadSafe
|
5
|
+
module Util
|
6
|
+
def self.make_synchronized_on_rbx(klass)
|
7
|
+
klass.class_eval do
|
8
|
+
private
|
9
|
+
|
10
|
+
def _mon_initialize
|
11
|
+
@_monitor = Monitor.new unless @_monitor # avoid double initialisation
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.new(*args)
|
15
|
+
obj = super(*args)
|
16
|
+
obj.send(:_mon_initialize)
|
17
|
+
obj
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
klass.superclass.instance_methods(false).each do |method|
|
22
|
+
case method
|
23
|
+
when :new_range, :new_reserved
|
24
|
+
klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
25
|
+
def #{method}(*args)
|
26
|
+
obj = super
|
27
|
+
obj.send(:_mon_initialize)
|
28
|
+
obj
|
29
|
+
end
|
30
|
+
RUBY
|
31
|
+
else
|
32
|
+
klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
33
|
+
def #{method}(*args)
|
34
|
+
monitor = @_monitor
|
35
|
+
monitor or raise("BUG: Internal monitor was not properly initialized. Please report this to the concurrent-ruby developers.")
|
36
|
+
monitor.synchronize { super }
|
37
|
+
end
|
38
|
+
RUBY
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.make_synchronized_on_truffleruby(klass)
|
44
|
+
klass.superclass.instance_methods(false).each do |method|
|
45
|
+
klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
46
|
+
def #{method}(*args, &block)
|
47
|
+
# TODO (pitr-ch 01-Jul-2018): don't use internal TruffleRuby APIs
|
48
|
+
Truffle::System.synchronized(self) { super(*args, &block) }
|
49
|
+
end
|
50
|
+
RUBY
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -86,15 +86,20 @@ module Concurrent
|
|
86
86
|
# @!visibility private
|
87
87
|
class Cell < Concurrent::AtomicReference
|
88
88
|
|
89
|
-
# TODO: this only adds padding after the :value slot, need to find a way to add padding before the slot
|
90
|
-
# @!visibility private
|
91
|
-
attr_reader *(12.times.collect{ |i| "padding_#{i}".to_sym })
|
92
|
-
|
93
89
|
alias_method :cas, :compare_and_set
|
94
90
|
|
95
91
|
def cas_computed
|
96
92
|
cas(current_value = value, yield(current_value))
|
97
93
|
end
|
94
|
+
|
95
|
+
# @!visibility private
|
96
|
+
def self.padding
|
97
|
+
# TODO: this only adds padding after the :value slot, need to find a way to add padding before the slot
|
98
|
+
# TODO (pitr-ch 28-Jul-2018): the padding instance vars may not be created
|
99
|
+
# hide from yardoc in a method
|
100
|
+
attr_reader *(12.times.collect{ |i| "padding_#{i}".to_sym })
|
101
|
+
end
|
102
|
+
padding
|
98
103
|
end
|
99
104
|
|
100
105
|
extend Volatile
|
@@ -126,6 +126,7 @@ module Concurrent
|
|
126
126
|
# task = Concurrent::TimerTask.new(execution_interval: 1, timeout_interval: 1){ 42 }
|
127
127
|
# task.add_observer(TaskObserver.new)
|
128
128
|
# task.execute
|
129
|
+
# sleep 4
|
129
130
|
#
|
130
131
|
# #=> (2013-10-13 19:08:58 -0400) Execution successfully returned 42
|
131
132
|
# #=> (2013-10-13 19:08:59 -0400) Execution successfully returned 42
|
@@ -164,7 +165,7 @@ module Concurrent
|
|
164
165
|
|
165
166
|
# Create a new TimerTask with the given task and configuration.
|
166
167
|
#
|
167
|
-
# @!macro
|
168
|
+
# @!macro timer_task_initialize
|
168
169
|
# @param [Hash] opts the options defining task execution.
|
169
170
|
# @option opts [Integer] :execution_interval number of seconds between
|
170
171
|
# task executions (default: EXECUTION_INTERVAL)
|
@@ -189,6 +190,7 @@ module Concurrent
|
|
189
190
|
def initialize(opts = {}, &task)
|
190
191
|
raise ArgumentError.new('no block given') unless block_given?
|
191
192
|
super
|
193
|
+
set_deref_options opts
|
192
194
|
end
|
193
195
|
|
194
196
|
# Is the executor running?
|
@@ -280,6 +282,7 @@ module Concurrent
|
|
280
282
|
@run_now = opts[:now] || opts[:run_now]
|
281
283
|
@executor = Concurrent::SafeTaskExecutor.new(task)
|
282
284
|
@running = Concurrent::AtomicBoolean.new(false)
|
285
|
+
@value = nil
|
283
286
|
|
284
287
|
self.observers = Collection::CopyOnNotifyObserverSet.new
|
285
288
|
end
|
@@ -305,7 +308,7 @@ module Concurrent
|
|
305
308
|
# @!visibility private
|
306
309
|
def execute_task(completion)
|
307
310
|
return nil unless @running.true?
|
308
|
-
ScheduledTask.execute(
|
311
|
+
ScheduledTask.execute(timeout_interval, args: [completion], &method(:timeout_task))
|
309
312
|
_success, value, reason = @executor.execute(self)
|
310
313
|
if completion.try?
|
311
314
|
self.value = value
|
data/lib/concurrent/tuple.rb
CHANGED
@@ -24,7 +24,7 @@ module Concurrent
|
|
24
24
|
attr_reader :size
|
25
25
|
|
26
26
|
# @!visibility private
|
27
|
-
Tuple = defined?(Rubinius::Tuple) ? Rubinius::Tuple : Array
|
27
|
+
Tuple = defined?(Rubinius::Tuple) ? Rubinius::Tuple : ::Array
|
28
28
|
private_constant :Tuple
|
29
29
|
|
30
30
|
# Create a new tuple of the given size.
|
data/lib/concurrent/tvar.rb
CHANGED
@@ -8,7 +8,7 @@ module Concurrent
|
|
8
8
|
#
|
9
9
|
# @!macro thread_safe_variable_comparison
|
10
10
|
#
|
11
|
-
# {include:file:
|
11
|
+
# {include:file:docs-source/tvar.md}
|
12
12
|
class TVar < Synchronization::Object
|
13
13
|
safe_initialization!
|
14
14
|
|
@@ -162,7 +162,7 @@ module Concurrent
|
|
162
162
|
|
163
163
|
class Transaction
|
164
164
|
|
165
|
-
ABORTED = Object.new
|
165
|
+
ABORTED = ::Object.new
|
166
166
|
|
167
167
|
ReadLogEntry = Struct.new(:tvar, :version)
|
168
168
|
|
@@ -16,7 +16,7 @@ module Concurrent
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# Add a handler to be run at `Kernel#at_exit`
|
19
|
-
# @param [Object] handler_id optionally provide an id, if
|
19
|
+
# @param [Object] handler_id optionally provide an id, if already present, handler is replaced
|
20
20
|
# @yield the handler
|
21
21
|
# @return id of the handler
|
22
22
|
def add(handler_id = nil, &handler)
|
@@ -42,12 +42,12 @@ module Concurrent
|
|
42
42
|
GLOBAL_MONOTONIC_CLOCK = class_definition.new
|
43
43
|
private_constant :GLOBAL_MONOTONIC_CLOCK
|
44
44
|
|
45
|
-
# @!macro
|
45
|
+
# @!macro monotonic_get_time
|
46
46
|
#
|
47
47
|
# Returns the current time a tracked by the application monotonic clock.
|
48
48
|
#
|
49
|
-
# @return [Float] The current monotonic time
|
50
|
-
#
|
49
|
+
# @return [Float] The current monotonic time since some unspecified
|
50
|
+
# starting point
|
51
51
|
#
|
52
52
|
# @!macro monotonic_clock_warning
|
53
53
|
def monotonic_time
|
@@ -12,19 +12,11 @@ module Concurrent
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def c_extensions_loaded?
|
15
|
-
@c_extensions_loaded
|
15
|
+
defined?(@c_extensions_loaded) && @c_extensions_loaded
|
16
16
|
end
|
17
17
|
|
18
18
|
def java_extensions_loaded?
|
19
|
-
@java_extensions_loaded
|
20
|
-
end
|
21
|
-
|
22
|
-
def set_c_extensions_loaded
|
23
|
-
@c_extensions_loaded = true
|
24
|
-
end
|
25
|
-
|
26
|
-
def set_java_extensions_loaded
|
27
|
-
@java_extensions_loaded = true
|
19
|
+
defined?(@java_extensions_loaded) && @java_extensions_loaded
|
28
20
|
end
|
29
21
|
|
30
22
|
def load_native_extensions
|
@@ -33,37 +25,43 @@ module Concurrent
|
|
33
25
|
end
|
34
26
|
|
35
27
|
if Concurrent.on_cruby? && !c_extensions_loaded?
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
set_c_extensions_loaded
|
40
|
-
end,
|
41
|
-
lambda do
|
42
|
-
# may be a Windows cross-compiled native gem
|
43
|
-
require "concurrent/#{RUBY_VERSION[0..2]}/extension"
|
44
|
-
set_c_extensions_loaded
|
45
|
-
end]
|
46
|
-
|
47
|
-
tries.each do |try|
|
48
|
-
begin
|
49
|
-
try.call
|
50
|
-
break
|
51
|
-
rescue LoadError
|
52
|
-
next
|
53
|
-
end
|
54
|
-
end
|
28
|
+
['concurrent/concurrent_ruby_ext',
|
29
|
+
"concurrent/#{RUBY_VERSION[0..2]}/concurrent_ruby_ext"
|
30
|
+
].each { |p| try_load_c_extension p }
|
55
31
|
end
|
56
32
|
|
57
33
|
if Concurrent.on_jruby? && !java_extensions_loaded?
|
58
34
|
begin
|
59
|
-
require '
|
35
|
+
require 'concurrent/concurrent_ruby.jar'
|
60
36
|
set_java_extensions_loaded
|
61
|
-
rescue LoadError
|
62
|
-
|
63
|
-
raise 'On JRuby but Java extensions failed to load.'
|
37
|
+
rescue LoadError => e
|
38
|
+
raise e, "Java extensions are required for JRuby.\n" + e.message, e.backtrace
|
64
39
|
end
|
65
40
|
end
|
66
41
|
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def set_c_extensions_loaded
|
46
|
+
@c_extensions_loaded = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_java_extensions_loaded
|
50
|
+
@java_extensions_loaded = true
|
51
|
+
end
|
52
|
+
|
53
|
+
def try_load_c_extension(path)
|
54
|
+
require path
|
55
|
+
set_c_extensions_loaded
|
56
|
+
rescue LoadError => e
|
57
|
+
if e.path == path
|
58
|
+
# move on with pure-Ruby implementations
|
59
|
+
# TODO (pitr-ch 12-Jul-2018): warning on verbose?
|
60
|
+
else
|
61
|
+
raise e
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
67
65
|
end
|
68
66
|
end
|
69
67
|
|
@@ -76,8 +76,6 @@ module Concurrent
|
|
76
76
|
def compute_processor_count
|
77
77
|
if Concurrent.on_jruby?
|
78
78
|
java.lang.Runtime.getRuntime.availableProcessors
|
79
|
-
elsif Concurrent.on_truffle?
|
80
|
-
Truffle::Primitive.logical_processors
|
81
79
|
else
|
82
80
|
os_name = RbConfig::CONFIG["target_os"]
|
83
81
|
if os_name =~ /mingw|mswin/
|
data/lib/concurrent/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: concurrent-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.1.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerry D'Antonio
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-08-15 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: |
|
16
16
|
Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
|
@@ -20,12 +20,30 @@ executables: []
|
|
20
20
|
extensions: []
|
21
21
|
extra_rdoc_files:
|
22
22
|
- README.md
|
23
|
-
- LICENSE.
|
23
|
+
- LICENSE.md
|
24
24
|
- CHANGELOG.md
|
25
25
|
files:
|
26
26
|
- CHANGELOG.md
|
27
|
-
-
|
27
|
+
- Gemfile
|
28
|
+
- LICENSE.md
|
28
29
|
- README.md
|
30
|
+
- Rakefile
|
31
|
+
- ext/concurrent-ruby/ConcurrentRubyService.java
|
32
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java
|
33
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java
|
34
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java
|
35
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java
|
36
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java
|
37
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java
|
38
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java
|
39
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java
|
40
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java
|
41
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java
|
42
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java
|
43
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java
|
44
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java
|
45
|
+
- ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java
|
46
|
+
- lib/concurrent-ruby.rb
|
29
47
|
- lib/concurrent.rb
|
30
48
|
- lib/concurrent/agent.rb
|
31
49
|
- lib/concurrent/array.rb
|
@@ -34,6 +52,7 @@ files:
|
|
34
52
|
- lib/concurrent/atomic/abstract_thread_local_var.rb
|
35
53
|
- lib/concurrent/atomic/atomic_boolean.rb
|
36
54
|
- lib/concurrent/atomic/atomic_fixnum.rb
|
55
|
+
- lib/concurrent/atomic/atomic_markable_reference.rb
|
37
56
|
- lib/concurrent/atomic/atomic_reference.rb
|
38
57
|
- lib/concurrent/atomic/count_down_latch.rb
|
39
58
|
- lib/concurrent/atomic/cyclic_barrier.rb
|
@@ -49,18 +68,13 @@ files:
|
|
49
68
|
- lib/concurrent/atomic/ruby_thread_local_var.rb
|
50
69
|
- lib/concurrent/atomic/semaphore.rb
|
51
70
|
- lib/concurrent/atomic/thread_local_var.rb
|
52
|
-
- lib/concurrent/atomic_reference/concurrent_update_error.rb
|
53
|
-
- lib/concurrent/atomic_reference/direct_update.rb
|
54
|
-
- lib/concurrent/atomic_reference/jruby+truffle.rb
|
55
|
-
- lib/concurrent/atomic_reference/jruby.rb
|
56
71
|
- lib/concurrent/atomic_reference/mutex_atomic.rb
|
57
72
|
- lib/concurrent/atomic_reference/numeric_cas_wrapper.rb
|
58
|
-
- lib/concurrent/atomic_reference/rbx.rb
|
59
|
-
- lib/concurrent/atomic_reference/ruby.rb
|
60
73
|
- lib/concurrent/atomics.rb
|
61
74
|
- lib/concurrent/collection/copy_on_notify_observer_set.rb
|
62
75
|
- lib/concurrent/collection/copy_on_write_observer_set.rb
|
63
76
|
- lib/concurrent/collection/java_non_concurrent_priority_queue.rb
|
77
|
+
- lib/concurrent/collection/lock_free_stack.rb
|
64
78
|
- lib/concurrent/collection/map/atomic_reference_map_backend.rb
|
65
79
|
- lib/concurrent/collection/map/mri_map_backend.rb
|
66
80
|
- lib/concurrent/collection/map/non_concurrent_map_backend.rb
|
@@ -72,11 +86,11 @@ files:
|
|
72
86
|
- lib/concurrent/concern/logging.rb
|
73
87
|
- lib/concurrent/concern/obligation.rb
|
74
88
|
- lib/concurrent/concern/observable.rb
|
89
|
+
- lib/concurrent/concurrent_ruby.jar
|
75
90
|
- lib/concurrent/configuration.rb
|
76
91
|
- lib/concurrent/constants.rb
|
77
92
|
- lib/concurrent/dataflow.rb
|
78
93
|
- lib/concurrent/delay.rb
|
79
|
-
- lib/concurrent/edge.rb
|
80
94
|
- lib/concurrent/errors.rb
|
81
95
|
- lib/concurrent/exchanger.rb
|
82
96
|
- lib/concurrent/executor/abstract_executor_service.rb
|
@@ -104,14 +118,16 @@ files:
|
|
104
118
|
- lib/concurrent/hash.rb
|
105
119
|
- lib/concurrent/immutable_struct.rb
|
106
120
|
- lib/concurrent/ivar.rb
|
107
|
-
- lib/concurrent/lazy_register.rb
|
108
121
|
- lib/concurrent/map.rb
|
109
122
|
- lib/concurrent/maybe.rb
|
110
123
|
- lib/concurrent/mutable_struct.rb
|
111
124
|
- lib/concurrent/mvar.rb
|
112
125
|
- lib/concurrent/options.rb
|
113
126
|
- lib/concurrent/promise.rb
|
127
|
+
- lib/concurrent/promises.rb
|
128
|
+
- lib/concurrent/re_include.rb
|
114
129
|
- lib/concurrent/scheduled_task.rb
|
130
|
+
- lib/concurrent/set.rb
|
115
131
|
- lib/concurrent/settable_struct.rb
|
116
132
|
- lib/concurrent/synchronization.rb
|
117
133
|
- lib/concurrent/synchronization/abstract_lockable_object.rb
|
@@ -122,19 +138,18 @@ files:
|
|
122
138
|
- lib/concurrent/synchronization/jruby_object.rb
|
123
139
|
- lib/concurrent/synchronization/lock.rb
|
124
140
|
- lib/concurrent/synchronization/lockable_object.rb
|
125
|
-
- lib/concurrent/synchronization/mri_lockable_object.rb
|
126
141
|
- lib/concurrent/synchronization/mri_object.rb
|
142
|
+
- lib/concurrent/synchronization/mutex_lockable_object.rb
|
127
143
|
- lib/concurrent/synchronization/object.rb
|
128
144
|
- lib/concurrent/synchronization/rbx_lockable_object.rb
|
129
145
|
- lib/concurrent/synchronization/rbx_object.rb
|
130
|
-
- lib/concurrent/synchronization/
|
131
|
-
- lib/concurrent/synchronization/truffle_object.rb
|
146
|
+
- lib/concurrent/synchronization/truffleruby_object.rb
|
132
147
|
- lib/concurrent/synchronization/volatile.rb
|
133
148
|
- lib/concurrent/thread_safe/synchronized_delegator.rb
|
134
149
|
- lib/concurrent/thread_safe/util.rb
|
135
150
|
- lib/concurrent/thread_safe/util/adder.rb
|
136
|
-
- lib/concurrent/thread_safe/util/array_hash_rbx.rb
|
137
151
|
- lib/concurrent/thread_safe/util/cheap_lockable.rb
|
152
|
+
- lib/concurrent/thread_safe/util/data_structures.rb
|
138
153
|
- lib/concurrent/thread_safe/util/power_of_two_tuple.rb
|
139
154
|
- lib/concurrent/thread_safe/util/striped64.rb
|
140
155
|
- lib/concurrent/thread_safe/util/volatile.rb
|
@@ -161,18 +176,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
176
|
requirements:
|
162
177
|
- - ">="
|
163
178
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
179
|
+
version: 2.0.0
|
165
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
181
|
requirements:
|
167
|
-
- - "
|
182
|
+
- - ">"
|
168
183
|
- !ruby/object:Gem::Version
|
169
|
-
version:
|
184
|
+
version: 1.3.1
|
170
185
|
requirements: []
|
171
186
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.7.3
|
173
188
|
signing_key:
|
174
189
|
specification_version: 4
|
175
190
|
summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell,
|
176
191
|
F#, C#, Java, and classic concurrency patterns.
|
177
192
|
test_files: []
|
178
|
-
has_rdoc:
|