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

Jul 17, 2009 23:04

Есть поисковая машина, которая хранит свои индексы на диске. При открытии индекса на запись создаётся специальный lock-файл, проверить его наличие можно функцией isLocked. Необходимо синхронизировать доступ к индексам между потоками. В голову приходит только такой вариант:

synchronized (lockObj) {
while (isLocked(INDEX)) {
lockObj.wait();
}
// write to index
lockObj.notifyAll();
}

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