Skip to content

Commit 9f897f3

Browse files
committed
Merge pull request #277 from ruby-concurrency/namespacing
Deprecated Concurrent::Atomic in lieu of Concurrent::AtomicReference.
2 parents cd68976 + 3354ad0 commit 9f897f3

File tree

17 files changed

+201
-171
lines changed

17 files changed

+201
-171
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ group :development do
66
gem 'rake', '~> 10.4.2'
77
gem 'rake-compiler', '~> 0.9.5'
88
gem 'gem-compiler', '~> 0.3.0'
9-
gem 'benchmark-ips'
9+
gem 'benchmark-ips', '~> 2.1.1'
1010
end
1111

1212
group :testing do

ext/com/concurrent_ruby/ext/AtomicReferenceLibrary.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
public class AtomicReferenceLibrary implements Library {
2626
public void load(Ruby runtime, boolean wrap) throws IOException {
2727
RubyModule concurrentMod = runtime.defineModule("Concurrent");
28-
RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomic", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
28+
RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicReference", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
2929
try {
3030
sun.misc.Unsafe.class.getMethod("getAndSetObject", Object.class);
3131
atomicCls.setAllocator(JRUBYREFERENCE8_ALLOCATOR);

ext/concurrent/rb_concurrent.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// module and class definitions
88

99
static VALUE rb_mConcurrent;
10-
static VALUE rb_cAtomic;
10+
static VALUE rb_cAtomicReference;
1111
static VALUE rb_cAtomicBoolean;
1212
static VALUE rb_cAtomicFixnum;
1313

@@ -17,20 +17,20 @@ void Init_extension() {
1717

1818
// define modules and classes
1919
rb_mConcurrent = rb_define_module("Concurrent");
20-
rb_cAtomic = rb_define_class_under(rb_mConcurrent, "CAtomic", rb_cObject);
20+
rb_cAtomicReference = rb_define_class_under(rb_mConcurrent, "CAtomicReference", rb_cObject);
2121
rb_cAtomicBoolean = rb_define_class_under(rb_mConcurrent, "CAtomicBoolean", rb_cObject);
2222
rb_cAtomicFixnum = rb_define_class_under(rb_mConcurrent, "CAtomicFixnum", rb_cObject);
2323

24-
// CAtomic
25-
rb_define_alloc_func(rb_cAtomic, ir_alloc);
26-
rb_define_method(rb_cAtomic, "initialize", ir_initialize, -1);
27-
rb_define_method(rb_cAtomic, "get", ir_get, 0);
28-
rb_define_method(rb_cAtomic, "set", ir_set, 1);
29-
rb_define_method(rb_cAtomic, "get_and_set", ir_get_and_set, 1);
30-
rb_define_method(rb_cAtomic, "_compare_and_set", ir_compare_and_set, 2);
31-
rb_define_alias(rb_cAtomic, "value", "get");
32-
rb_define_alias(rb_cAtomic, "value=", "set");
33-
rb_define_alias(rb_cAtomic, "swap", "get_and_set");
24+
// CAtomicReference
25+
rb_define_alloc_func(rb_cAtomicReference, ir_alloc);
26+
rb_define_method(rb_cAtomicReference, "initialize", ir_initialize, -1);
27+
rb_define_method(rb_cAtomicReference, "get", ir_get, 0);
28+
rb_define_method(rb_cAtomicReference, "set", ir_set, 1);
29+
rb_define_method(rb_cAtomicReference, "get_and_set", ir_get_and_set, 1);
30+
rb_define_method(rb_cAtomicReference, "_compare_and_set", ir_compare_and_set, 2);
31+
rb_define_alias(rb_cAtomicReference, "value", "get");
32+
rb_define_alias(rb_cAtomicReference, "value=", "set");
33+
rb_define_alias(rb_cAtomicReference, "swap", "get_and_set");
3434

3535
// CAtomicBoolean
3636
rb_define_alloc_func(rb_cAtomicBoolean, atomic_boolean_allocate);

lib/concurrent.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@
1313
require 'concurrent/executors'
1414
require 'concurrent/utilities'
1515

16-
require 'concurrent/atomic'
16+
require 'concurrent/atomic/atomic_reference'
1717
require 'concurrent/agent'
1818
require 'concurrent/async'
19-
require 'concurrent/atomic'
2019
require 'concurrent/dataflow'
2120
require 'concurrent/delay'
2221
require 'concurrent/exchanger'

lib/concurrent/atomic.rb

Lines changed: 0 additions & 93 deletions
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
require 'concurrent/native_extensions'
2+
require 'concurrent/utility/engine'
3+
require 'concurrent/atomic_reference/concurrent_update_error'
4+
require 'concurrent/atomic_reference/mutex_atomic'
5+
6+
begin
7+
# force fallback impl with FORCE_ATOMIC_FALLBACK=1
8+
if /[^0fF]/ =~ ENV['FORCE_ATOMIC_FALLBACK']
9+
ruby_engine = 'mutex_atomic'
10+
else
11+
ruby_engine = Concurrent.ruby_engine
12+
end
13+
14+
require "concurrent/atomic_reference/#{ruby_engine}"
15+
rescue LoadError
16+
#warn 'Compiled extensions not installed, pure Ruby Atomic will be used.'
17+
end
18+
19+
if defined? Concurrent::JavaAtomicReference
20+
21+
# @!macro atomic_reference
22+
class Concurrent::AtomicReference < Concurrent::JavaAtomicReference
23+
end
24+
25+
elsif defined? Concurrent::RbxAtomicReference
26+
27+
# @!macro atomic_reference
28+
class Concurrent::AtomicReference < Concurrent::RbxAtomicReference
29+
end
30+
31+
elsif defined? Concurrent::CAtomicReference
32+
33+
# @!macro atomic_reference
34+
class Concurrent::AtomicReference < Concurrent::CAtomicReference
35+
end
36+
37+
else
38+
39+
# @!macro atomic_reference
40+
class Concurrent::AtomicReference < Concurrent::MutexAtomicReference
41+
end
42+
end
43+
44+
module Concurrent
45+
46+
# @see Concurrent::AtomicReference
47+
# @deprecated Use Concurrent::AtomicReference instead.
48+
Atomic = AtomicReference
49+
end

lib/concurrent/atomic/read_write_lock.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
require 'thread'
2-
require 'concurrent/atomic'
2+
require 'concurrent/atomic/atomic_reference'
33
require 'concurrent/errors'
44

55
module Concurrent
@@ -53,11 +53,11 @@ class ReadWriteLock
5353

5454
# Create a new `ReadWriteLock` in the unlocked state.
5555
def initialize
56-
@counter = Atomic.new(0) # single integer which represents lock state
57-
@reader_q = ConditionVariable.new # queue for waiting readers
58-
@reader_mutex = Mutex.new # to protect reader queue
59-
@writer_q = ConditionVariable.new # queue for waiting writers
60-
@writer_mutex = Mutex.new # to protect writer queue
56+
@counter = AtomicReference.new(0) # single integer which represents lock state
57+
@reader_q = ConditionVariable.new # queue for waiting readers
58+
@reader_mutex = Mutex.new # to protect reader queue
59+
@writer_q = ConditionVariable.new # queue for waiting writers
60+
@writer_mutex = Mutex.new # to protect writer queue
6161
end
6262

6363
# Execute a block operation within a read lock.

lib/concurrent/atomic/thread_local_var.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'concurrent/atomic'
2-
31
module Concurrent
42

53
# @!macro [attach] abstract_thread_local_var

lib/concurrent/atomic_reference/jruby.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
require 'concurrent/native_extensions'
22

3-
if defined?(Concurrent::JavaAtomic)
3+
if defined?(Concurrent::JavaAtomicReference)
44
require 'concurrent/atomic_reference/direct_update'
55

66
module Concurrent
77

88
# @!macro atomic_reference
9-
class JavaAtomic
9+
class JavaAtomicReference
1010
include Concurrent::AtomicDirectUpdate
1111
end
1212
end

lib/concurrent/atomic_reference/mutex_atomic.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
module Concurrent
66

77
# @!macro atomic_reference
8-
class MutexAtomic
8+
class MutexAtomicReference
99
include Concurrent::AtomicDirectUpdate
1010
include Concurrent::AtomicNumericCompareAndSetWrapper
1111

0 commit comments

Comments
 (0)