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