class Moneta::Lock
Locks the underlying stores with a Mutex
@api public
Public Class Methods
new(adapter, options = {})
click to toggle source
@param [Moneta store] adapter The underlying store @param [Hash] options @option options [String] :mutex (::Mutex.new) Mutex
object
Calls superclass method
# File lib/moneta/lock.rb, line 10 def initialize(adapter, options = {}) super @lock = options[:mutex] || ::Mutex.new end
Protected Instance Methods
lock!(&block)
click to toggle source
# File lib/moneta/lock.rb, line 34 def lock!(&block) locks << @lock @lock.synchronize(&block) ensure locks.delete @lock end
locked?()
click to toggle source
# File lib/moneta/lock.rb, line 41 def locked? locks.include? @lock end
locks()
click to toggle source
# File lib/moneta/lock.rb, line 30 def locks Thread.current.thread_variable_get('Moneta::Lock') end
locks=(locks)
click to toggle source
# File lib/moneta/lock.rb, line 26 def locks=(locks) Thread.current.thread_variable_set('Moneta::Lock', locks) end
wrap(name, *args) { || ... }
click to toggle source
# File lib/moneta/lock.rb, line 17 def wrap(name, *args, &block) self.locks ||= Set.new if locked? yield else lock!(&block) end end