1- require 'thread '
1+ require 'concurrent/synchronization '
22require 'concurrent/atomic_reference/direct_update'
33require '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
5561end
0 commit comments