class Rufus::Scheduler::SchedulerCore

def synchronize_with_mutex(mutex, &block)

def synchronize_with_mutex(mutex, &block)
  case mutex
  when Mutex
    mutex.synchronize { block.call }
  when Array
    mutex.reduce(block) do |memo, m|
      m = (@mutexes[m.to_s] ||= Mutex.new) unless m.is_a?(Mutex)
      lambda { m.synchronize { memo.call } }
    end.call
  else
    (@mutexes[mutex.to_s] ||= Mutex.new).synchronize { block.call }
  end
end