remove semaphore language and clarify language

This commit is contained in:
Nick Elser
2015-04-13 22:13:07 -07:00
parent 498073b92e
commit 14e442e99d
3 changed files with 10 additions and 5 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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"