def do_lock
      clean
      if(@lock_owner)
        if(owner?(Thread.current))
          @locks.unshift(Thread.current)
        else
          @locks << Thread.current
        end
      else
        @lock_owner = Thread.current
      end
      true
    end
def do_lock
      clean
      if(@lock_owner)
        if(owner?(Thread.current))
          @locks.unshift(Thread.current)
        else
          @locks << Thread.current
        end
      else
        @lock_owner = Thread.current
      end
      true
    end
Aquire monitor lock or be queued for lock
 NOTE: To make this method more generic and useful, it does
 not perform a Thread.exclusive, and as such this method should
 only be called from within a Thread.exclusive{}