concurrent-ruby 1.0.5 → 1.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +42 -0
  3. data/Gemfile +39 -0
  4. data/{LICENSE.txt → LICENSE.md} +2 -0
  5. data/README.md +203 -105
  6. data/Rakefile +278 -0
  7. data/ext/concurrent-ruby/ConcurrentRubyService.java +17 -0
  8. data/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java +175 -0
  9. data/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java +248 -0
  10. data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java +93 -0
  11. data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java +113 -0
  12. data/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java +159 -0
  13. data/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java +304 -0
  14. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java +31 -0
  15. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java +3863 -0
  16. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java +203 -0
  17. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java +342 -0
  18. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java +3800 -0
  19. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java +204 -0
  20. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java +291 -0
  21. data/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java +199 -0
  22. data/lib/concurrent-ruby.rb +1 -0
  23. data/lib/concurrent.rb +24 -20
  24. data/lib/concurrent/agent.rb +7 -7
  25. data/lib/concurrent/array.rb +59 -32
  26. data/lib/concurrent/async.rb +4 -4
  27. data/lib/concurrent/atom.rb +9 -9
  28. data/lib/concurrent/atomic/atomic_boolean.rb +24 -20
  29. data/lib/concurrent/atomic/atomic_fixnum.rb +27 -23
  30. data/lib/concurrent/atomic/atomic_markable_reference.rb +164 -0
  31. data/lib/concurrent/atomic/atomic_reference.rb +176 -33
  32. data/lib/concurrent/atomic/count_down_latch.rb +6 -6
  33. data/lib/concurrent/atomic/cyclic_barrier.rb +1 -1
  34. data/lib/concurrent/atomic/event.rb +1 -1
  35. data/lib/concurrent/atomic/java_count_down_latch.rb +6 -5
  36. data/lib/concurrent/atomic/mutex_count_down_latch.rb +1 -0
  37. data/lib/concurrent/atomic/read_write_lock.rb +2 -1
  38. data/lib/concurrent/atomic/reentrant_read_write_lock.rb +3 -1
  39. data/lib/concurrent/atomic/semaphore.rb +8 -8
  40. data/lib/concurrent/atomic/thread_local_var.rb +7 -7
  41. data/lib/concurrent/atomic_reference/mutex_atomic.rb +3 -8
  42. data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +1 -1
  43. data/lib/concurrent/atomics.rb +0 -43
  44. data/lib/concurrent/collection/lock_free_stack.rb +127 -0
  45. data/lib/concurrent/collection/map/atomic_reference_map_backend.rb +3 -3
  46. data/lib/concurrent/collection/map/non_concurrent_map_backend.rb +1 -2
  47. data/lib/concurrent/collection/non_concurrent_priority_queue.rb +29 -29
  48. data/lib/concurrent/concern/dereferenceable.rb +1 -1
  49. data/lib/concurrent/concern/logging.rb +6 -1
  50. data/lib/concurrent/concern/observable.rb +7 -7
  51. data/lib/concurrent/concurrent_ruby.jar +0 -0
  52. data/lib/concurrent/configuration.rb +1 -6
  53. data/lib/concurrent/constants.rb +1 -1
  54. data/lib/concurrent/dataflow.rb +2 -1
  55. data/lib/concurrent/delay.rb +9 -7
  56. data/lib/concurrent/exchanger.rb +13 -21
  57. data/lib/concurrent/executor/abstract_executor_service.rb +2 -2
  58. data/lib/concurrent/executor/cached_thread_pool.rb +1 -1
  59. data/lib/concurrent/executor/executor_service.rb +15 -15
  60. data/lib/concurrent/executor/fixed_thread_pool.rb +18 -18
  61. data/lib/concurrent/executor/java_thread_pool_executor.rb +10 -7
  62. data/lib/concurrent/executor/single_thread_executor.rb +2 -2
  63. data/lib/concurrent/executor/thread_pool_executor.rb +6 -6
  64. data/lib/concurrent/executor/timer_set.rb +1 -1
  65. data/lib/concurrent/future.rb +4 -1
  66. data/lib/concurrent/hash.rb +53 -30
  67. data/lib/concurrent/ivar.rb +5 -6
  68. data/lib/concurrent/map.rb +20 -25
  69. data/lib/concurrent/maybe.rb +1 -1
  70. data/lib/concurrent/mutable_struct.rb +15 -14
  71. data/lib/concurrent/mvar.rb +2 -2
  72. data/lib/concurrent/promise.rb +53 -21
  73. data/lib/concurrent/promises.rb +1938 -0
  74. data/lib/concurrent/re_include.rb +58 -0
  75. data/lib/concurrent/set.rb +66 -0
  76. data/lib/concurrent/settable_struct.rb +1 -0
  77. data/lib/concurrent/synchronization.rb +4 -5
  78. data/lib/concurrent/synchronization/abstract_lockable_object.rb +5 -5
  79. data/lib/concurrent/synchronization/abstract_struct.rb +6 -4
  80. data/lib/concurrent/synchronization/lockable_object.rb +6 -6
  81. data/lib/concurrent/synchronization/{mri_lockable_object.rb → mutex_lockable_object.rb} +19 -14
  82. data/lib/concurrent/synchronization/object.rb +8 -4
  83. data/lib/concurrent/synchronization/truffleruby_object.rb +46 -0
  84. data/lib/concurrent/synchronization/volatile.rb +11 -9
  85. data/lib/concurrent/thread_safe/util/data_structures.rb +55 -0
  86. data/lib/concurrent/thread_safe/util/striped64.rb +9 -4
  87. data/lib/concurrent/timer_task.rb +5 -2
  88. data/lib/concurrent/tuple.rb +1 -1
  89. data/lib/concurrent/tvar.rb +2 -2
  90. data/lib/concurrent/utility/at_exit.rb +1 -1
  91. data/lib/concurrent/utility/engine.rb +2 -2
  92. data/lib/concurrent/utility/monotonic_time.rb +3 -3
  93. data/lib/concurrent/utility/native_extension_loader.rb +31 -33
  94. data/lib/concurrent/utility/processor_counter.rb +0 -2
  95. data/lib/concurrent/version.rb +2 -2
  96. metadata +35 -21
  97. data/lib/concurrent/atomic_reference/concurrent_update_error.rb +0 -8
  98. data/lib/concurrent/atomic_reference/direct_update.rb +0 -81
  99. data/lib/concurrent/atomic_reference/jruby+truffle.rb +0 -2
  100. data/lib/concurrent/atomic_reference/jruby.rb +0 -16
  101. data/lib/concurrent/atomic_reference/rbx.rb +0 -22
  102. data/lib/concurrent/atomic_reference/ruby.rb +0 -32
  103. data/lib/concurrent/edge.rb +0 -26
  104. data/lib/concurrent/lazy_register.rb +0 -81
  105. data/lib/concurrent/synchronization/truffle_lockable_object.rb +0 -9
  106. data/lib/concurrent/synchronization/truffle_object.rb +0 -31
  107. 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 [attach] timer_task_initialize
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(execution_interval, args: [completion], &method(:timeout_task))
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
@@ -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.
@@ -8,7 +8,7 @@ module Concurrent
8
8
  #
9
9
  # @!macro thread_safe_variable_comparison
10
10
  #
11
- # {include:file:doc/tvar.md}
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 allready present, handler is replaced
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)
@@ -19,8 +19,8 @@ module Concurrent
19
19
  ruby_engine == 'rbx'
20
20
  end
21
21
 
22
- def on_truffle?
23
- ruby_engine == 'jruby+truffle'
22
+ def on_truffleruby?
23
+ ruby_engine == 'truffleruby'
24
24
  end
25
25
 
26
26
  def on_windows?
@@ -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 [attach] monotonic_get_time
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 when `since` not given else
50
- # the elapsed monotonic time between `since` and the current time
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 ||= false
15
+ defined?(@c_extensions_loaded) && @c_extensions_loaded
16
16
  end
17
17
 
18
18
  def java_extensions_loaded?
19
- @java_extensions_loaded ||= false
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
- tries = [
37
- lambda do
38
- require 'concurrent/extension'
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 'concurrent_ruby_ext'
35
+ require 'concurrent/concurrent_ruby.jar'
60
36
  set_java_extensions_loaded
61
- rescue LoadError
62
- # move on with pure-Ruby implementations
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/
@@ -1,4 +1,4 @@
1
1
  module Concurrent
2
- VERSION = '1.0.5'
3
- EDGE_VERSION = '0.3.1'
2
+ VERSION = '1.1.0.pre1'
3
+ EDGE_VERSION = '0.4.0.pre1'
4
4
  end
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.5
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: 2017-02-26 00:00:00.000000000 Z
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.txt
23
+ - LICENSE.md
24
24
  - CHANGELOG.md
25
25
  files:
26
26
  - CHANGELOG.md
27
- - LICENSE.txt
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/truffle_lockable_object.rb
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: 1.9.3
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: '0'
184
+ version: 1.3.1
170
185
  requirements: []
171
186
  rubyforge_project:
172
- rubygems_version: 2.6.8
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:
@@ -1,8 +0,0 @@
1
- module Concurrent
2
-
3
- # @!macro atomic_reference
4
- class ConcurrentUpdateError < ThreadError
5
- # frozen pre-allocated backtrace to speed ConcurrentUpdateError
6
- CONC_UP_ERR_BACKTRACE = ['backtrace elided; set verbose to enable'].freeze
7
- end
8
- end