Skip to content

Commit 0cff9a1

Browse files
committed
MutexAtomic is now a Synchronization::Object.
1 parent 4b6d2b9 commit 0cff9a1

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'thread'
1+
require 'concurrent/synchronization'
22
require 'concurrent/atomic_reference/direct_update'
33
require 'concurrent/atomic_reference/numeric_cas_wrapper'
44

@@ -8,31 +8,31 @@ module Concurrent
88
#
99
# @!visibility private
1010
# @!macro internal_implementation_note
11-
class MutexAtomicReference
11+
class MutexAtomicReference < Synchronization::Object
1212
include Concurrent::AtomicDirectUpdate
1313
include Concurrent::AtomicNumericCompareAndSetWrapper
1414

1515
# @!macro atomic_reference_method_initialize
1616
def initialize(value = nil)
17-
@mutex = Mutex.new
18-
@value = value
17+
super()
18+
synchronize { ns_initialize(value) }
1919
end
2020

2121
# @!macro atomic_reference_method_get
2222
def get
23-
@mutex.synchronize { @value }
23+
synchronize { @value }
2424
end
2525
alias_method :value, :get
2626

2727
# @!macro atomic_reference_method_set
2828
def set(new_value)
29-
@mutex.synchronize { @value = new_value }
29+
synchronize { @value = new_value }
3030
end
3131
alias_method :value=, :set
3232

3333
# @!macro atomic_reference_method_get_and_set
3434
def get_and_set(new_value)
35-
@mutex.synchronize do
35+
synchronize do
3636
old_value = @value
3737
@value = new_value
3838
old_value
@@ -42,7 +42,7 @@ def get_and_set(new_value)
4242

4343
# @!macro atomic_reference_method_compare_and_set
4444
def _compare_and_set(old_value, new_value)
45-
@mutex.synchronize do
45+
synchronize do
4646
if @value.equal? old_value
4747
@value = new_value
4848
true
@@ -51,5 +51,11 @@ def _compare_and_set(old_value, new_value)
5151
end
5252
end
5353
end
54+
55+
protected
56+
57+
def ns_initialize(value)
58+
@value = value
59+
end
5460
end
5561
end

0 commit comments

Comments
 (0)