Synchronizable is a gem that provides an easy module-based mechanism for making any object thread-safe with an instance-level lock. This gem was originally inspired from Mike Perham's dalli gem, which provides a ThreadSafe module for his memcached client. However, that solution is not currently generic. This gem attempts to provide a generic solution that can work with any object (including classes/modules) in your system.
Synchronizable is available as a RubyGem:
gem install synchronizable
Making an instance synchronizable
class Foo def bar end def baz end end foo = Foo.new # the foo instance now has all methods synchronized / thread-safe foo.extend(Synchronizable)
Making a class synchronizable
# note that classes are objects in Ruby and can also be synchronized class Bar def self.foo end end # only class/singleton methods will become synchronized Bar.extend(Synchronizable)
Utilizing the #synchronize method to protect a block
# the synchronize method takes a block and executes it # in a thread-safe manner s = "this is a test" s.extend(Synchronizable) s.synchronize do s.gsub!('i', 'x') s.slice!(0, 5) end
Note on Patches/Pull Requests
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don't break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
Mike Perham (inspired from ThreadSafety module in github.com/mperham/dalli)
Copyright © 2011 Ryan LeCompte. See LICENSE for further details.