Class: ThreadSafe::Util::VolatileTuple
- Inherits:
-
Object
- Object
- ThreadSafe::Util::VolatileTuple
- Includes:
- Enumerable
- Defined in:
- lib/thread_safe/util/volatile_tuple.rb
Overview
A fixed size array with volatile volatile getters/setters. Usage: arr = VolatileTuple.new(16) arr.volatile_set(0, :foo) arr.volatile_get(0) # => :foo arr.cas(0, :foo, :bar) # => true arr.volatile_get(0) # => :bar
Direct Known Subclasses
Constant Summary
- Tuple =
defined?(Rubinius::Tuple) ? Rubinius::Tuple : Array
Instance Method Summary (collapse)
- - (Object) compare_and_set(i, old_value, new_value) (also: #cas)
- - (Object) each
-
- (VolatileTuple) initialize(size)
constructor
A new instance of VolatileTuple.
- - (Object) size
- - (Object) volatile_get(i)
- - (Object) volatile_set(i, value)
Constructor Details
- (VolatileTuple) initialize(size)
Returns a new instance of VolatileTuple
15 16 17 18 19 20 21 22 |
# File 'lib/thread_safe/util/volatile_tuple.rb', line 15 def initialize(size) @tuple = tuple = Tuple.new(size) i = 0 while i < size tuple[i] = AtomicReference.new i += 1 end end |
Instance Method Details
- (Object) compare_and_set(i, old_value, new_value) Also known as: cas
32 33 34 |
# File 'lib/thread_safe/util/volatile_tuple.rb', line 32 def compare_and_set(i, old_value, new_value) @tuple[i].compare_and_set(old_value, new_value) end |
- (Object) each
41 42 43 |
# File 'lib/thread_safe/util/volatile_tuple.rb', line 41 def each @tuple.each {|ref| yield ref.get} end |
- (Object) size
37 38 39 |
# File 'lib/thread_safe/util/volatile_tuple.rb', line 37 def size @tuple.size end |
- (Object) volatile_get(i)
24 25 26 |
# File 'lib/thread_safe/util/volatile_tuple.rb', line 24 def volatile_get(i) @tuple[i].get end |
- (Object) volatile_set(i, value)
28 29 30 |
# File 'lib/thread_safe/util/volatile_tuple.rb', line 28 def volatile_set(i, value) @tuple[i].set(value) end |