Class: DistributedMutex

Inherits:
Object
  • Object
show all
Defined in:
lib/distributed_mutex.rb,
lib/distributed_mutex/version.rb

Overview

Cross-process locking using Redis.

Constant Summary collapse

VERSION =
"0.1.1"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, redis = nil) ⇒ DistributedMutex

Returns a new instance of DistributedMutex.



7
8
9
10
11
# File 'lib/distributed_mutex.rb', line 7

def initialize(key, redis=nil)
  @key = key
  @redis = redis || $redis
  @mutex = Mutex.new
end

Class Method Details

.synchronize(key, redis = nil, &blk) ⇒ Object



3
4
5
# File 'lib/distributed_mutex.rb', line 3

def self.synchronize(key, redis=nil, &blk)
  self.new(key, redis).synchronize(&blk)
end

Instance Method Details

#synchronizeObject

NOTE wrapped in mutex to maintain its semantics



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/distributed_mutex.rb', line 14

def synchronize
  @mutex.lock
  while !try_to_get_lock
    sleep 0.001
  end

  yield

ensure
  @redis.del @key
  @mutex.unlock
end