Вопрос по flock в php?

Здравствуйте!


Появились вопросы по поводу записи данных в файл(ы) с использованием блокировок (flock).


Интересует ее надежность.

Скажем если два процесса одновременно захотят заблочить файл, что будет? Выстроится очередь или всетаки они оба пойдут писать в него?


Если она ненадежна, то подскажите более надежный вариант.
  • Вопрос задан
  • 4091 просмотр
Пригласить эксперта
Ответы на вопрос 4
У flock() нет в общем случае гарантированного поведения, на *nix лучше, по-моему, использовать семафоры.
Ответ написан
maxout
@maxout
Если ваш софт будет устанавливаться на стороннем окружении, то полагаться на flock определённо не стоит.
Если же вы пишете что-то для себя, и точно знаете, что например за рамки linux/freebsd + apache/nginx окружение не выйдет — можно смело использовать.
Если два процесса захотят заблочить файл — второй процесс будет ждать освобождения lock'а. Когда первый освободит lock, выполнение flock() во втором процессе завершится и процесс продолжит выполнение кода.

Более надёжный вариант на все случаи жизни — организовать lock самостоятельно через файлы/базу/memcache итп.
Ответ написан
Вот потому что не очень ясно и не хочется пользоваться :) А суть там по-моему в том, что flock где-то может работать на уровне процесса, а не ядра/фс, то есть несколько потоков в одном процессе она разрулит, а вот то что другой процесс тоже файл залочил и не узнает. Дедлока не будет, а два процесса в файл писать будут.
Ответ написан
Комментировать
mephisto
@mephisto
Мне кажется, что надежнее и целесообразнее воспользоваться блокировкой с помощью memcached.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы