diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ba0217..0039f16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ ## 0.1.1 -- Use [MessagePack](https://github.com/msgpack/msgpack-ruby) for semaphore serialization. +- Use [MessagePack](https://github.com/msgpack/msgpack-ruby) for lock serialization. ## 0.1.0 diff --git a/README.md b/README.md index d73d8c1..58d8781 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Suo [![Build Status](https://travis-ci.org/nickelser/suo.svg?branch=master)](https://travis-ci.org/nickelser/suo) [![Code Climate](https://codeclimate.com/github/nickelser/suo/badges/gpa.svg)](https://codeclimate.com/github/nickelser/suo) [![Test Coverage](https://codeclimate.com/github/nickelser/suo/badges/coverage.svg)](https://codeclimate.com/github/nickelser/suo) [![Gem Version](https://badge.fury.io/rb/suo.svg)](http://badge.fury.io/rb/suo) -:lock: Distributed semaphores using Memcached or Redis in Ruby. +:lock: Distributed locks using Memcached or Redis in Ruby. -Suo provides a very performant distributed lock solution using Compare-And-Set (`CAS`) commands in Memcached, and `WATCH/MULTI` in Redis. +Suo provides a very performant distributed lock solution using Compare-And-Set (`CAS`) commands in Memcached, and `WATCH/MULTI` in Redis. It allows locking both single exclusion (a mutex - sharing one resource), and multiple resources. ## Installation @@ -31,6 +31,7 @@ suo.lock("some_key") do @puppies.pet! end +# The second argument to lock is the number of arguments (defaulting to one - a mutex) Thread.new { suo.lock("other_key", 2) { puts "One"; sleep 2 } } Thread.new { suo.lock("other_key", 2) { puts "Two"; sleep 2 } } Thread.new { suo.lock("other_key", 2) { puts "Three" } } @@ -69,6 +70,10 @@ suo.lock("foo") do |lock| end ``` +## Semaphore + +With multiple resources, Suo acts like a semaphore, but is not strictly a semaphore according to the traditional definition, as the lock acquires ownership. + ## TODO - more race condition tests diff --git a/suo.gemspec b/suo.gemspec index 36fa0cf..542de89 100644 --- a/suo.gemspec +++ b/suo.gemspec @@ -9,8 +9,8 @@ Gem::Specification.new do |spec| spec.authors = ["Nick Elser"] spec.email = ["nick.elser@gmail.com"] - spec.summary = %q(Distributed semaphores using Memcached or Redis.) - spec.description = %q(Distributed semaphores using Memcached or Redis.) + spec.summary = %q(Distributed locks using Memcached or Redis.) + spec.description = %q(Distributed locks using Memcached or Redis.) spec.homepage = "https://github.com/nickelser/suo" spec.license = "MIT"