Class: Concurrent::MutexAtomic
- Inherits:
-
Object
- Object
- Concurrent::MutexAtomic
- Defined in:
- lib/concurrent/atomic_reference/mutex_atomic.rb
Overview
An object reference that may be updated atomically.
Testing with ruby 2.1.2
*** Sequential updates ***
user system total real
no lock 0.000000 0.000000 0.000000 ( 0.005502)
mutex 0.030000 0.000000 0.030000 ( 0.025158)
MutexAtomic 0.100000 0.000000 0.100000 ( 0.103096)
CAtomic 0.040000 0.000000 0.040000 ( 0.034012)
*** Parallel updates ***
user system total real
no lock 0.010000 0.000000 0.010000 ( 0.009387)
mutex 0.030000 0.010000 0.040000 ( 0.032545)
MutexAtomic 0.830000 2.280000 3.110000 ( 2.146622)
CAtomic 0.040000 0.000000 0.040000 ( 0.038332)
Testing with jruby 1.9.3
*** Sequential updates ***
user system total real
no lock 0.170000 0.000000 0.170000 ( 0.051000)
mutex 0.370000 0.010000 0.380000 ( 0.121000)
MutexAtomic 1.530000 0.020000 1.550000 ( 0.471000)
JavaAtomic 0.370000 0.010000 0.380000 ( 0.112000)
*** Parallel updates ***
user system total real
no lock 0.390000 0.000000 0.390000 ( 0.105000)
mutex 0.480000 0.040000 0.520000 ( 0.145000)
MutexAtomic 1.600000 0.180000 1.780000 ( 0.511000)
JavaAtomic 0.460000 0.010000 0.470000 ( 0.131000)
Direct Known Subclasses
Instance Method Summary collapse
-
#_compare_and_set(old_value, new_value) ⇒ Boolean
Atomically sets the value to the given updated value if the current value == the expected value.
-
#get ⇒ Object
(also: #value)
Gets the current value.
-
#get_and_set(new_value) ⇒ Object
(also: #swap)
Atomically sets to the given value and returns the old value.
-
#initialize(value = nil) ⇒ MutexAtomic
constructor
A new instance of MutexAtomic.
-
#set(new_value) ⇒ Object
(also: #value=)
Sets to the given value.
Methods included from AtomicNumericCompareAndSetWrapper
Methods included from AtomicDirectUpdate
Constructor Details
#initialize(value = nil) ⇒ MutexAtomic
13 14 15 16 |
# File 'lib/concurrent/atomic_reference/mutex_atomic.rb', line 13 def initialize(value = nil) @mutex = Mutex.new @value = value end |
Instance Method Details
#_compare_and_set(old_value, new_value) ⇒ Boolean
Atomically sets the value to the given updated value if the current value == the expected value.
that the actual value was not equal to the expected value.
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/concurrent/atomic_reference/mutex_atomic.rb', line 66 def _compare_and_set(old_value, new_value) #:nodoc: return false unless @mutex.try_lock begin return false unless @value.equal? old_value @value = new_value ensure @mutex.unlock end true end |
#get ⇒ Object Also known as: value
Gets the current value.
23 24 25 |
# File 'lib/concurrent/atomic_reference/mutex_atomic.rb', line 23 def get @mutex.synchronize { @value } end |
#get_and_set(new_value) ⇒ Object Also known as: swap
Atomically sets to the given value and returns the old value.
47 48 49 50 51 52 53 |
# File 'lib/concurrent/atomic_reference/mutex_atomic.rb', line 47 def get_and_set(new_value) @mutex.synchronize do old_value = @value @value = new_value old_value end end |
#set(new_value) ⇒ Object Also known as: value=
Sets to the given value.
35 36 37 |
# File 'lib/concurrent/atomic_reference/mutex_atomic.rb', line 35 def set(new_value) @mutex.synchronize { @value = new_value } end |