Last Modified
2015-07-02 05:38:21 -0400
Requires
  • concurrent/atomic/atomic_reference
  • concurrent/atomic/atomic_boolean
  • concurrent/atomic/atomic_fixnum
  • concurrent/atomic/condition
  • concurrent/atomic/cyclic_barrier
  • concurrent/atomic/count_down_latch
  • concurrent/atomic/event
  • concurrent/atomic/read_write_lock
  • concurrent/atomic/semaphore
  • concurrent/atomic/thread_local_var

Description

@!macro [new] atomic_reference

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)
    MutexAtomicReference  0.100000   0.000000   0.100000 (  0.103096)
    CAtomicReference      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)
    MutexAtomicReference  0.830000   2.280000   3.110000 (  2.146622)
    CAtomicReference      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)
    MutexAtomicReference  1.530000   0.020000   1.550000 (  0.471000)
    JavaAtomicReference   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)
    MutexAtomicReference  1.600000   0.180000   1.780000 (  0.511000)
    JavaAtomicReference   0.460000   0.010000   0.470000 (  0.131000)

@see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html
@see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html

@!method initialize
  @!macro [new] atomic_reference_method_initialize
    @param [Object] value The initial value.

@!method get
  @!macro [new] atomic_reference_method_get
    Gets the current value.
    @return [Object] the current value

@!method set
  @!macro [new] atomic_reference_method_set
    Sets to the given value.
    @param [Object] new_value the new value
    @return [Object] the new value

@!method get_and_set
  @!macro [new] atomic_reference_method_get_and_set
    Atomically sets to the given value and returns the old value.
    @param [Object] new_value the new value
    @return [Object] the old value

@!method compare_and_set
  @!macro [new] atomic_reference_method_compare_and_set

    Atomically sets the value to the given updated value if
    the current value == the expected value.

    @param [Object] old_value the expected value
    @param [Object] new_value the new value

    @return [Boolean] `true` if successful. A `false` return indicates
    that the actual value was not equal to the expected value.