require 'monitor' module Redisrank module Synchronize class << self def included(base) base.send(:include, InstanceMethods) end def monitor @monitor ||= Monitor.new end def thread_safe monitor.synchronize do return @thread_safe unless @thread_safe.nil? @thread_safe = false end end def thread_safe=(value) monitor.synchronize do @thread_safe = value end end end # << self module InstanceMethods def thread_safe Synchronize.thread_safe end def thread_safe=(value) Synchronize.thread_safe = value end def monitor Synchronize.monitor end def synchronize(&block) if thread_safe monitor.synchronize(&block) else block.call end end end # InstanceMethods end end