docs: public boolean acquireGlobalLock(boolean exclusive, long timeout) {
        log.tracef("About to acquire global lock. Exclusive? %s", exclusive);
        boolean success = true;
        for (int i = 0; i < sharedLocks.length; i++) {
           Lock toAcquire = exclusive ? sharedLocks[i].writeLock() : sharedLocks[i].readLock();
           try {
              success = toAcquire.tryLock(timeout, TimeUnit.MILLISECONDS);
              if (!success) {
                 if (trace) log.tracef("Could not acquire lock on %s. Exclusive? %b", toAcquire, exclusive);
                 break;
              }
           } catch (InterruptedException e) {
              if (trace) log.trace("Caught InterruptedException while trying to acquire global lock", e);
              success = false;
              Thread.currentThread().interrupt();
           } finally {
              if (!success) {
                 for (int j = 0; j < i; j++) {
                    Lock toRelease = exclusive ? sharedLocks[j].writeLock() : sharedLocks[j].readLock();
                    toRelease.unlock();
                 }
              }
           }
        }
        return success;
     }