Вопрос по одновременному доступу к маленьким файлам с небольшой вероятностью коллизий.
flock() не использую , так как читал, что он не работает под некоторыми платформами и файловыми системами. Подскажите, пожалуйста, на сколько такой алгоритм благоприятный, что не учтено, как можно сделать по другому:
Запись в файл.
Создаем файл LOCK('LOCKимя файла') с временем начала записи.
Создаем временный файл на базе оригинала.
В случае успешной записи удаляем оригинал и переименовываем временный файл.
Удаляем LOCK.
Запрос на запись
Смотрим LOCK файл. Если нет => Запись в файл
Если есть.
1. Если разница между текущим временем и временем в LOCK больше 1-2 секунд(значит был сбой, так как маленькие файлы не могут записываться дольше.(?)), удаляем LOCK файл и временный файл. Дальше => Запись в файл.
2. Если разница меньше, запускаем цикл с небольшим значением в usleep() и счетчиком. Как только пропал файл LOCK => Запись в файл. Если счетчик больше, к прим. значения 100, прерываем рекурсию, возвращаем ошибку.