From: Charles Oliver Nutter Date: 2010-06-08T21:22:19+09:00 Subject: Re: [ANN] atomic 0.0.1 - An atomic reference for Ruby And now a 0.0.3 that adds "swap", fixes "update" return value to be the new value, and uses a small extension for JRuby for perf and to preserve value identity. On Tue, Jun 8, 2010 at 4:29 AM, Charles Oliver Nutter wrote: > And just pushed a minor update in 0.0.2 :) > > On Tue, Jun 8, 2010 at 12:06 AM, Charles Oliver Nutter > wrote: >> atomic: An atomic reference implementation for JRuby and green or GIL-threaded >> Ruby implementations (MRI 1.8/1.9, Rubinius) >> >> == Summary == >> >> This library provides: >> >> * an Atomic class that guarantees atomic updates to its contained value >> >> The Atomic class provides accessors for the contained "value" plus two update >> methods: >> >> * update will run the provided block, passing the current value and replacing >>  it with the block result iff the value has not been changed in the mean time. >>  It may run the block repeatedly if there are other concurrent updates in >>  progress. >> * try_update will run the provided block, passing the current value and >>  replacing it with the block result. If the value changes before the update >>  can happen, it will throw Atomic::ConcurrentUpdateError. >> >> The atomic repository is at http://github.com/headius/ruby-atomic. >> >> == Usage == >> >>  # gem install atomic >> require 'atomic' >> >> my_atomic = Atomic.new(0) >> my_atomic.update {|v| v + 1} >> begin >>  my_atomic.try_update {|v| v + 1} >> rescue Atomic::ConcurrentUpdateError => cue >>  # deal with it (retry, propagate, etc) >> end >> >> >