concurrent-ruby 0.7.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/LICENSE.txt +21 -0
  2. data/README.md +217 -0
  3. data/lib/concurrent.rb +45 -0
  4. data/lib/concurrent/actor.rb +104 -0
  5. data/lib/concurrent/actor/behaviour.rb +70 -0
  6. data/lib/concurrent/actor/behaviour/abstract.rb +48 -0
  7. data/lib/concurrent/actor/behaviour/awaits.rb +21 -0
  8. data/lib/concurrent/actor/behaviour/buffer.rb +54 -0
  9. data/lib/concurrent/actor/behaviour/errors_on_unknown_message.rb +12 -0
  10. data/lib/concurrent/actor/behaviour/executes_context.rb +18 -0
  11. data/lib/concurrent/actor/behaviour/linking.rb +42 -0
  12. data/lib/concurrent/actor/behaviour/pausing.rb +77 -0
  13. data/lib/concurrent/actor/behaviour/removes_child.rb +16 -0
  14. data/lib/concurrent/actor/behaviour/sets_results.rb +36 -0
  15. data/lib/concurrent/actor/behaviour/supervised.rb +58 -0
  16. data/lib/concurrent/actor/behaviour/supervising.rb +34 -0
  17. data/lib/concurrent/actor/behaviour/terminates_children.rb +13 -0
  18. data/lib/concurrent/actor/behaviour/termination.rb +54 -0
  19. data/lib/concurrent/actor/context.rb +153 -0
  20. data/lib/concurrent/actor/core.rb +213 -0
  21. data/lib/concurrent/actor/default_dead_letter_handler.rb +9 -0
  22. data/lib/concurrent/actor/envelope.rb +41 -0
  23. data/lib/concurrent/actor/errors.rb +27 -0
  24. data/lib/concurrent/actor/internal_delegations.rb +49 -0
  25. data/lib/concurrent/actor/public_delegations.rb +40 -0
  26. data/lib/concurrent/actor/reference.rb +81 -0
  27. data/lib/concurrent/actor/root.rb +37 -0
  28. data/lib/concurrent/actor/type_check.rb +48 -0
  29. data/lib/concurrent/actor/utils.rb +10 -0
  30. data/lib/concurrent/actor/utils/ad_hoc.rb +21 -0
  31. data/lib/concurrent/actor/utils/balancer.rb +40 -0
  32. data/lib/concurrent/actor/utils/broadcast.rb +52 -0
  33. data/lib/concurrent/actor/utils/pool.rb +59 -0
  34. data/lib/concurrent/actress.rb +3 -0
  35. data/lib/concurrent/agent.rb +230 -0
  36. data/lib/concurrent/async.rb +284 -0
  37. data/lib/concurrent/atomic.rb +91 -0
  38. data/lib/concurrent/atomic/atomic_boolean.rb +202 -0
  39. data/lib/concurrent/atomic/atomic_fixnum.rb +203 -0
  40. data/lib/concurrent/atomic/condition.rb +67 -0
  41. data/lib/concurrent/atomic/copy_on_notify_observer_set.rb +118 -0
  42. data/lib/concurrent/atomic/copy_on_write_observer_set.rb +117 -0
  43. data/lib/concurrent/atomic/count_down_latch.rb +116 -0
  44. data/lib/concurrent/atomic/cyclic_barrier.rb +106 -0
  45. data/lib/concurrent/atomic/event.rb +98 -0
  46. data/lib/concurrent/atomic/synchronization.rb +51 -0
  47. data/lib/concurrent/atomic/thread_local_var.rb +82 -0
  48. data/lib/concurrent/atomic_reference/concurrent_update_error.rb +8 -0
  49. data/lib/concurrent/atomic_reference/direct_update.rb +50 -0
  50. data/lib/concurrent/atomic_reference/jruby.rb +14 -0
  51. data/lib/concurrent/atomic_reference/mutex_atomic.rb +77 -0
  52. data/lib/concurrent/atomic_reference/numeric_cas_wrapper.rb +25 -0
  53. data/lib/concurrent/atomic_reference/rbx.rb +19 -0
  54. data/lib/concurrent/atomic_reference/ruby.rb +37 -0
  55. data/lib/concurrent/atomics.rb +11 -0
  56. data/lib/concurrent/channel/buffered_channel.rb +85 -0
  57. data/lib/concurrent/channel/channel.rb +41 -0
  58. data/lib/concurrent/channel/unbuffered_channel.rb +35 -0
  59. data/lib/concurrent/channel/waitable_list.rb +40 -0
  60. data/lib/concurrent/channels.rb +5 -0
  61. data/lib/concurrent/collection/blocking_ring_buffer.rb +71 -0
  62. data/lib/concurrent/collection/priority_queue.rb +305 -0
  63. data/lib/concurrent/collection/ring_buffer.rb +59 -0
  64. data/lib/concurrent/collections.rb +3 -0
  65. data/lib/concurrent/configuration.rb +161 -0
  66. data/lib/concurrent/dataflow.rb +108 -0
  67. data/lib/concurrent/delay.rb +104 -0
  68. data/lib/concurrent/dereferenceable.rb +101 -0
  69. data/lib/concurrent/errors.rb +30 -0
  70. data/lib/concurrent/exchanger.rb +34 -0
  71. data/lib/concurrent/executor/cached_thread_pool.rb +44 -0
  72. data/lib/concurrent/executor/executor.rb +282 -0
  73. data/lib/concurrent/executor/fixed_thread_pool.rb +33 -0
  74. data/lib/concurrent/executor/immediate_executor.rb +65 -0
  75. data/lib/concurrent/executor/java_cached_thread_pool.rb +31 -0
  76. data/lib/concurrent/executor/java_fixed_thread_pool.rb +41 -0
  77. data/lib/concurrent/executor/java_single_thread_executor.rb +22 -0
  78. data/lib/concurrent/executor/java_thread_pool_executor.rb +180 -0
  79. data/lib/concurrent/executor/per_thread_executor.rb +100 -0
  80. data/lib/concurrent/executor/ruby_cached_thread_pool.rb +29 -0
  81. data/lib/concurrent/executor/ruby_fixed_thread_pool.rb +32 -0
  82. data/lib/concurrent/executor/ruby_single_thread_executor.rb +74 -0
  83. data/lib/concurrent/executor/ruby_thread_pool_executor.rb +288 -0
  84. data/lib/concurrent/executor/ruby_thread_pool_worker.rb +72 -0
  85. data/lib/concurrent/executor/safe_task_executor.rb +35 -0
  86. data/lib/concurrent/executor/serialized_execution.rb +126 -0
  87. data/lib/concurrent/executor/single_thread_executor.rb +35 -0
  88. data/lib/concurrent/executor/thread_pool_executor.rb +68 -0
  89. data/lib/concurrent/executor/timer_set.rb +143 -0
  90. data/lib/concurrent/executors.rb +9 -0
  91. data/lib/concurrent/future.rb +125 -0
  92. data/lib/concurrent/ivar.rb +111 -0
  93. data/lib/concurrent/lazy_register.rb +58 -0
  94. data/lib/concurrent/logging.rb +17 -0
  95. data/lib/concurrent/mvar.rb +200 -0
  96. data/lib/concurrent/obligation.rb +171 -0
  97. data/lib/concurrent/observable.rb +40 -0
  98. data/lib/concurrent/options_parser.rb +48 -0
  99. data/lib/concurrent/promise.rb +170 -0
  100. data/lib/concurrent/scheduled_task.rb +79 -0
  101. data/lib/concurrent/timer_task.rb +341 -0
  102. data/lib/concurrent/tvar.rb +248 -0
  103. data/lib/concurrent/utilities.rb +3 -0
  104. data/lib/concurrent/utility/processor_count.rb +152 -0
  105. data/lib/concurrent/utility/timeout.rb +35 -0
  106. data/lib/concurrent/utility/timer.rb +21 -0
  107. data/lib/concurrent/version.rb +3 -0
  108. data/lib/concurrent_ruby.rb +1 -0
  109. data/lib/concurrent_ruby_ext.jar +0 -0
  110. data/lib/concurrent_ruby_ext.so +0 -0
  111. data/lib/extension_helper.rb +28 -0
  112. metadata +163 -0
@@ -0,0 +1,91 @@
1
+ #####################################################################
2
+ # Attempt to check for the deprecated ruby-atomic gem and warn the
3
+ # user that they should use the new implementation instead.
4
+
5
+ if defined?(Atomic)
6
+ warn <<-RUBY
7
+ [ATOMIC] Detected an `Atomic` class, which may indicate a dependency
8
+ on the ruby-atomic gem. That gem has been deprecated and merged into
9
+ the concurrent-ruby gem. Please use the Concurrent::Atomic class for
10
+ atomic references and not the Atomic class.
11
+ RUBY
12
+ end
13
+ #####################################################################
14
+
15
+ require 'concurrent/atomic_reference/concurrent_update_error'
16
+ require 'concurrent/atomic_reference/mutex_atomic'
17
+
18
+ begin
19
+ # force fallback impl with FORCE_ATOMIC_FALLBACK=1
20
+ if /[^0fF]/ =~ ENV['FORCE_ATOMIC_FALLBACK']
21
+ ruby_engine = 'mutex_atomic'
22
+ else
23
+ ruby_engine = defined?(RUBY_ENGINE)? RUBY_ENGINE : 'ruby'
24
+ end
25
+
26
+ require "concurrent/atomic_reference/#{ruby_engine}"
27
+ rescue LoadError
28
+ warn 'Compiled extensions not installed, pure Ruby Atomic will be used.'
29
+ end
30
+
31
+ if defined? Concurrent::JavaAtomic
32
+
33
+ # @!macro [attach] atomic_reference
34
+ #
35
+ # An object reference that may be updated atomically.
36
+ #
37
+ # Testing with ruby 2.1.2
38
+ #
39
+ # *** Sequential updates ***
40
+ # user system total real
41
+ # no lock 0.000000 0.000000 0.000000 ( 0.005502)
42
+ # mutex 0.030000 0.000000 0.030000 ( 0.025158)
43
+ # MutexAtomic 0.100000 0.000000 0.100000 ( 0.103096)
44
+ # CAtomic 0.040000 0.000000 0.040000 ( 0.034012)
45
+ #
46
+ # *** Parallel updates ***
47
+ # user system total real
48
+ # no lock 0.010000 0.000000 0.010000 ( 0.009387)
49
+ # mutex 0.030000 0.010000 0.040000 ( 0.032545)
50
+ # MutexAtomic 0.830000 2.280000 3.110000 ( 2.146622)
51
+ # CAtomic 0.040000 0.000000 0.040000 ( 0.038332)
52
+ #
53
+ # Testing with jruby 1.9.3
54
+ #
55
+ # *** Sequential updates ***
56
+ # user system total real
57
+ # no lock 0.170000 0.000000 0.170000 ( 0.051000)
58
+ # mutex 0.370000 0.010000 0.380000 ( 0.121000)
59
+ # MutexAtomic 1.530000 0.020000 1.550000 ( 0.471000)
60
+ # JavaAtomic 0.370000 0.010000 0.380000 ( 0.112000)
61
+ #
62
+ # *** Parallel updates ***
63
+ # user system total real
64
+ # no lock 0.390000 0.000000 0.390000 ( 0.105000)
65
+ # mutex 0.480000 0.040000 0.520000 ( 0.145000)
66
+ # MutexAtomic 1.600000 0.180000 1.780000 ( 0.511000)
67
+ # JavaAtomic 0.460000 0.010000 0.470000 ( 0.131000)
68
+ #
69
+ # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html
70
+ # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html
71
+ class Concurrent::Atomic < Concurrent::JavaAtomic
72
+ end
73
+
74
+ elsif defined? Concurrent::RbxAtomic
75
+
76
+ # @!macro atomic_reference
77
+ class Concurrent::Atomic < Concurrent::RbxAtomic
78
+ end
79
+
80
+ elsif Concurrent.allow_c_native_class?('CAtomic')
81
+
82
+ # @!macro atomic_reference
83
+ class Concurrent::Atomic < Concurrent::CAtomic
84
+ end
85
+
86
+ else
87
+
88
+ # @!macro atomic_reference
89
+ class Concurrent::Atomic < Concurrent::MutexAtomic
90
+ end
91
+ end
@@ -0,0 +1,202 @@
1
+ require_relative '../../extension_helper'
2
+ Concurrent.safe_require_c_extensions
3
+
4
+ module Concurrent
5
+
6
+ # @!macro [attach] atomic_boolean
7
+ #
8
+ # A boolean value that can be updated atomically. Reads and writes to an atomic
9
+ # boolean and thread-safe and guaranteed to succeed. Reads and writes may block
10
+ # briefly but no explicit locking is required.
11
+ #
12
+ # Testing with ruby 2.1.2
13
+ # Testing with Concurrent::MutexAtomicBoolean...
14
+ # 2.790000 0.000000 2.790000 ( 2.791454)
15
+ # Testing with Concurrent::CAtomicBoolean...
16
+ # 0.740000 0.000000 0.740000 ( 0.740206)
17
+ #
18
+ # Testing with jruby 1.9.3
19
+ # Testing with Concurrent::MutexAtomicBoolean...
20
+ # 5.240000 2.520000 7.760000 ( 3.683000)
21
+ # Testing with Concurrent::JavaAtomicBoolean...
22
+ # 3.340000 0.010000 3.350000 ( 0.855000)
23
+ #
24
+ # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html java.util.concurrent.atomic.AtomicBoolean
25
+ class MutexAtomicBoolean
26
+
27
+ # @!macro [attach] atomic_boolean_method_initialize
28
+ #
29
+ # Creates a new `AtomicBoolean` with the given initial value.
30
+ #
31
+ # @param [Boolean] initial the initial value
32
+ def initialize(initial = false)
33
+ @value = !!initial
34
+ @mutex = Mutex.new
35
+ end
36
+
37
+ # @!macro [attach] atomic_boolean_method_value_get
38
+ #
39
+ # Retrieves the current `Boolean` value.
40
+ #
41
+ # @return [Boolean] the current value
42
+ def value
43
+ @mutex.lock
44
+ @value
45
+ ensure
46
+ @mutex.unlock
47
+ end
48
+
49
+ # @!macro [attach] atomic_boolean_method_value_set
50
+ #
51
+ # Explicitly sets the value.
52
+ #
53
+ # @param [Boolean] value the new value to be set
54
+ #
55
+ # @return [Boolean] the current value
56
+ def value=(value)
57
+ @mutex.lock
58
+ @value = !!value
59
+ @value
60
+ ensure
61
+ @mutex.unlock
62
+ end
63
+
64
+ # @!macro [attach] atomic_boolean_method_true_question
65
+ #
66
+ # Is the current value `true`
67
+ #
68
+ # @return [Boolean] true if the current value is `true`, else false
69
+ def true?
70
+ @mutex.lock
71
+ @value
72
+ ensure
73
+ @mutex.unlock
74
+ end
75
+
76
+ # @!macro atomic_boolean_method_false_question
77
+ #
78
+ # Is the current value `false`
79
+ #
80
+ # @return [Boolean] true if the current value is `false`, else false
81
+ def false?
82
+ @mutex.lock
83
+ !@value
84
+ ensure
85
+ @mutex.unlock
86
+ end
87
+
88
+ # @!macro [attach] atomic_boolean_method_make_true
89
+ #
90
+ # Explicitly sets the value to true.
91
+ #
92
+ # @return [Boolean] true is value has changed, otherwise false
93
+ def make_true
94
+ @mutex.lock
95
+ old = @value
96
+ @value = true
97
+ !old
98
+ ensure
99
+ @mutex.unlock
100
+ end
101
+
102
+ # @!macro [attach] atomic_boolean_method_make_false
103
+ #
104
+ # Explicitly sets the value to false.
105
+ #
106
+ # @return [Boolean] true is value has changed, otherwise false
107
+ def make_false
108
+ @mutex.lock
109
+ old = @value
110
+ @value = false
111
+ old
112
+ ensure
113
+ @mutex.unlock
114
+ end
115
+ end
116
+
117
+ if RUBY_PLATFORM == 'java'
118
+
119
+ # @!macro atomic_boolean
120
+ class JavaAtomicBoolean
121
+
122
+ # @!macro atomic_boolean_method_initialize
123
+ #
124
+ def initialize(initial = false)
125
+ @atomic = java.util.concurrent.atomic.AtomicBoolean.new(!!initial)
126
+ end
127
+
128
+ # @!macro atomic_boolean_method_value_get
129
+ #
130
+ def value
131
+ @atomic.get
132
+ end
133
+
134
+ # @!macro atomic_boolean_method_value_set
135
+ #
136
+ def value=(value)
137
+ @atomic.set(!!value)
138
+ end
139
+
140
+ # @!macro atomic_boolean_method_true_question
141
+ def true?
142
+ @atomic.get
143
+ end
144
+
145
+ # @!macro atomic_boolean_method_false_question
146
+ def false?
147
+ !@atomic.get
148
+ end
149
+
150
+ # @!macro atomic_boolean_method_make_true
151
+ def make_true
152
+ @atomic.compareAndSet(false, true)
153
+ end
154
+
155
+ # @!macro atomic_boolean_method_make_false
156
+ def make_false
157
+ @atomic.compareAndSet(true, false)
158
+ end
159
+ end
160
+
161
+ # @!macro atomic_boolean
162
+ class AtomicBoolean < JavaAtomicBoolean
163
+ end
164
+
165
+ elsif Concurrent.allow_c_native_class?('CAtomicBoolean')
166
+
167
+ # @!macro atomic_boolean
168
+ class CAtomicBoolean
169
+
170
+ # @!method initialize
171
+ # @!macro atomic_boolean_method_initialize
172
+
173
+ # @!method value
174
+ # @!macro atomic_boolean_method_value_get
175
+
176
+ # @!method value=
177
+ # @!macro atomic_boolean_method_value_set
178
+
179
+ # @!method true?
180
+ # @!macro atomic_boolean_method_true_question
181
+
182
+ # @!method false?
183
+ # @!macro atomic_boolean_method_false_question
184
+
185
+ # @!method make_true
186
+ # @!macro atomic_boolean_method_make_true
187
+
188
+ # @!method make_false
189
+ # @!macro atomic_boolean_method_make_false
190
+ end
191
+
192
+ # @!macro atomic_boolean
193
+ class AtomicBoolean < CAtomicBoolean
194
+ end
195
+
196
+ else
197
+
198
+ # @!macro atomic_boolean
199
+ class AtomicBoolean < MutexAtomicBoolean
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,203 @@
1
+ require_relative '../../extension_helper'
2
+ Concurrent.safe_require_c_extensions
3
+
4
+ module Concurrent
5
+
6
+ # @!macro [attach] atomic_fixnum
7
+ #
8
+ # A numeric value that can be updated atomically. Reads and writes to an atomic
9
+ # fixnum and thread-safe and guaranteed to succeed. Reads and writes may block
10
+ # briefly but no explicit locking is required.
11
+ #
12
+ # Testing with ruby 2.1.2
13
+ # Testing with Concurrent::MutexAtomicFixnum...
14
+ # 3.130000 0.000000 3.130000 ( 3.136505)
15
+ # Testing with Concurrent::CAtomicFixnum...
16
+ # 0.790000 0.000000 0.790000 ( 0.785550)
17
+ #
18
+ # Testing with jruby 1.9.3
19
+ # Testing with Concurrent::MutexAtomicFixnum...
20
+ # 5.460000 2.460000 7.920000 ( 3.715000)
21
+ # Testing with Concurrent::JavaAtomicFixnum...
22
+ # 4.520000 0.030000 4.550000 ( 1.187000)
23
+ #
24
+ # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html java.util.concurrent.atomic.AtomicLong
25
+ class MutexAtomicFixnum
26
+
27
+ # http://stackoverflow.com/questions/535721/ruby-max-integer
28
+ MIN_VALUE = -(2**(0.size * 8 -2))
29
+ MAX_VALUE = (2**(0.size * 8 -2) -1)
30
+
31
+ # @!macro [attach] atomic_fixnum_method_initialize
32
+ #
33
+ # Creates a new `AtomicFixnum` with the given initial value.
34
+ #
35
+ # @param [Fixnum] init the initial value
36
+ # @raise [ArgumentError] if the initial value is not a `Fixnum`
37
+ def initialize(init = 0)
38
+ raise ArgumentError.new('initial value must be a Fixnum') unless init.is_a?(Fixnum)
39
+ @value = init
40
+ @mutex = Mutex.new
41
+ end
42
+
43
+ # @!macro [attach] atomic_fixnum_method_value_get
44
+ #
45
+ # Retrieves the current `Fixnum` value.
46
+ #
47
+ # @return [Fixnum] the current value
48
+ def value
49
+ @mutex.lock
50
+ @value
51
+ ensure
52
+ @mutex.unlock
53
+ end
54
+
55
+ # @!macro [attach] atomic_fixnum_method_value_set
56
+ #
57
+ # Explicitly sets the value.
58
+ #
59
+ # @param [Fixnum] value the new value to be set
60
+ #
61
+ # @return [Fixnum] the current value
62
+ #
63
+ # @raise [ArgumentError] if the new value is not a `Fixnum`
64
+ def value=(value)
65
+ raise ArgumentError.new('value must be a Fixnum') unless value.is_a?(Fixnum)
66
+ @mutex.lock
67
+ @value = value
68
+ ensure
69
+ @mutex.unlock
70
+ end
71
+
72
+ # @!macro [attach] atomic_fixnum_method_increment
73
+ #
74
+ # Increases the current value by 1.
75
+ #
76
+ # @return [Fixnum] the current value after incrementation
77
+ def increment
78
+ @mutex.lock
79
+ @value += 1
80
+ ensure
81
+ @mutex.unlock
82
+ end
83
+
84
+ alias_method :up, :increment
85
+
86
+ # @!macro [attach] atomic_fixnum_method_decrement
87
+ #
88
+ # Decreases the current value by 1.
89
+ #
90
+ # @return [Fixnum] the current value after decrementation
91
+ def decrement
92
+ @mutex.lock
93
+ @value -= 1
94
+ ensure
95
+ @mutex.unlock
96
+ end
97
+
98
+ alias_method :down, :decrement
99
+
100
+ # @!macro [attach] atomic_fixnum_method_compare_and_set
101
+ #
102
+ # Atomically sets the value to the given updated value if the current
103
+ # value == the expected value.
104
+ #
105
+ # @param [Fixnum] expect the expected value
106
+ # @param [Fixnum] update the new value
107
+ #
108
+ # @return [Boolean] true if the value was updated else false
109
+ def compare_and_set(expect, update)
110
+ @mutex.lock
111
+ if @value == expect
112
+ @value = update
113
+ true
114
+ else
115
+ false
116
+ end
117
+ ensure
118
+ @mutex.unlock
119
+ end
120
+ end
121
+
122
+ if RUBY_PLATFORM == 'java'
123
+
124
+ # @!macro atomic_fixnum
125
+ class JavaAtomicFixnum
126
+
127
+ MIN_VALUE = Java::JavaLang::Long::MIN_VALUE
128
+ MAX_VALUE = Java::JavaLang::Long::MAX_VALUE
129
+
130
+ # @!macro atomic_fixnum_method_initialize
131
+ def initialize(init = 0)
132
+ raise ArgumentError.new('initial value must be a Fixnum') unless init.is_a?(Fixnum)
133
+ @atomic = java.util.concurrent.atomic.AtomicLong.new(init)
134
+ end
135
+
136
+ # @!macro atomic_fixnum_method_value_get
137
+ def value
138
+ @atomic.get
139
+ end
140
+
141
+ # @!macro atomic_fixnum_method_value_set
142
+ def value=(value)
143
+ raise ArgumentError.new('value must be a Fixnum') unless value.is_a?(Fixnum)
144
+ @atomic.set(value)
145
+ end
146
+
147
+ # @!macro atomic_fixnum_method_increment
148
+ def increment
149
+ @atomic.increment_and_get
150
+ end
151
+ alias_method :up, :increment
152
+
153
+ # @!macro atomic_fixnum_method_decrement
154
+ def decrement
155
+ @atomic.decrement_and_get
156
+ end
157
+ alias_method :down, :decrement
158
+
159
+ # @!macro atomic_fixnum_method_compare_and_set
160
+ def compare_and_set(expect, update)
161
+ @atomic.compare_and_set(expect, update)
162
+ end
163
+ end
164
+
165
+ # @!macro atomic_fixnum
166
+ class AtomicFixnum < JavaAtomicFixnum
167
+ end
168
+
169
+ elsif Concurrent.allow_c_native_class?('CAtomicFixnum')
170
+
171
+ # @!macro atomic_fixnum
172
+ class CAtomicFixnum
173
+
174
+ # @!method initialize
175
+ # @!macro atomic_fixnum_method_initialize
176
+
177
+ # @!method value
178
+ # @!macro atomic_fixnum_method_value_get
179
+
180
+ # @!method value=
181
+ # @!macro atomic_fixnum_method_value_set
182
+
183
+ # @!method increment
184
+ # @!macro atomic_fixnum_method_increment
185
+
186
+ # @!method decrement
187
+ # @!macro atomic_fixnum_method_decrement
188
+
189
+ # @!method compare_and_set
190
+ # @!macro atomic_fixnum_method_compare_and_set
191
+ end
192
+
193
+ # @!macro atomic_fixnum
194
+ class AtomicFixnum < CAtomicFixnum
195
+ end
196
+
197
+ else
198
+
199
+ # @!macro atomic_fixnum
200
+ class AtomicFixnum < MutexAtomicFixnum
201
+ end
202
+ end
203
+ end