Image

Синхронизация внешних ресурсов

Есть поисковая машина, которая хранит свои индексы на диске. При открытии индекса на запись создаётся специальный lock-файл, проверить его наличие можно функцией isLocked. Необходимо синхронизировать доступ к индексам между потоками. В голову приходит только такой вариант:
synchronized (lockObj) {
    while (isLocked(INDEX)) {
        lockObj.wait();
    }
    // write to index
    lockObj.notifyAll();
}

Проблема в том, что индексов на диске может быть несколько, и когда происходит запись в один из них, другие должны оставаться доступными. Можно это сделать как-нибудь красиво, да ещё и так, чтобы операции по синхронизации не занимали времени больше, чем запись в индекс?