Skip to content
Create a gist now

Instantly share code, notes, and snippets.

Built-in atomic variables for JRuby...hopefully we can get this into Ruby 2.2

Currently, in order to have atomic operations in Ruby you must use my "atomic" gem. Ideally, we'd have VM-level support for atomic operations on instance variables, to enable us to build higher-level concurrency abstractions efficiently.

See if you'd like to contribute to this effort.

>> class Foo
>> attr_accessor :bar, atomic: true
>> end
=> nil
>> hello, goodbye = 'hello'.freeze, 'goodbye'.freeze
=> ["hello", "goodbye"]
>> f =
=> #<Foo:0x32f67bbb>
>> = hello
=> "hello"
>> f.bar_swap goodbye
=> "hello"
=> "goodbye"
>> f.bar_cas hello, 'world'
=> false
=> "goodbye"
>> f.bar_cas goodbye, 'world'
=> true
=> "world"

What's the difference between #bar= and #bar_swap here? I see it's distinct from CAS, and there's no expected value passed in.


I'll answer my own lazy question - it returns the old value, where assignment returns the new value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.