1
- require 'thread '
1
+ require 'concurrent/synchronization '
2
2
require 'concurrent/atomic_reference/direct_update'
3
3
require 'concurrent/atomic_reference/numeric_cas_wrapper'
4
4
@@ -8,31 +8,31 @@ module Concurrent
8
8
#
9
9
# @!visibility private
10
10
# @!macro internal_implementation_note
11
- class MutexAtomicReference
11
+ class MutexAtomicReference < Synchronization :: Object
12
12
include Concurrent ::AtomicDirectUpdate
13
13
include Concurrent ::AtomicNumericCompareAndSetWrapper
14
14
15
15
# @!macro atomic_reference_method_initialize
16
16
def initialize ( value = nil )
17
- @mutex = Mutex . new
18
- @value = value
17
+ super ( )
18
+ synchronize { ns_initialize ( value ) }
19
19
end
20
20
21
21
# @!macro atomic_reference_method_get
22
22
def get
23
- @mutex . synchronize { @value }
23
+ synchronize { @value }
24
24
end
25
25
alias_method :value , :get
26
26
27
27
# @!macro atomic_reference_method_set
28
28
def set ( new_value )
29
- @mutex . synchronize { @value = new_value }
29
+ synchronize { @value = new_value }
30
30
end
31
31
alias_method :value= , :set
32
32
33
33
# @!macro atomic_reference_method_get_and_set
34
34
def get_and_set ( new_value )
35
- @mutex . synchronize do
35
+ synchronize do
36
36
old_value = @value
37
37
@value = new_value
38
38
old_value
@@ -42,7 +42,7 @@ def get_and_set(new_value)
42
42
43
43
# @!macro atomic_reference_method_compare_and_set
44
44
def _compare_and_set ( old_value , new_value )
45
- @mutex . synchronize do
45
+ synchronize do
46
46
if @value . equal? old_value
47
47
@value = new_value
48
48
true
@@ -51,5 +51,11 @@ def _compare_and_set(old_value, new_value)
51
51
end
52
52
end
53
53
end
54
+
55
+ protected
56
+
57
+ def ns_initialize ( value )
58
+ @value = value
59
+ end
54
60
end
55
61
end
0 commit comments