Как пользоваться flock()?

Если вы решаете задачу конкурентного доступа к файлу (или какому то другому ресурсу) в PHP, и решили использовать flock() для этой цели, то вам понадобится верно представлять как работает механизм блокировки.

Представим себе, что есть разные программные потоки, одни из которых читают данные — «читатели», а другие их меняют — «писари». Ясно, что «читатель» должен дождаться пока операции записи завершатся. При этом несколько «читателей» не мешают друг другу.

Семафор

Чтобы блокировка работала, необходимо использовать один и тот же способ блокировки. Иными словами, flock() нужно вызывать как при чтении, так и при записи.

В случае с «семафорным» файлом код может выглядеть вот так:

Т.е. мы проводим блокировку некого файла-семафора, а запись и чтение проводится с другими объектами.

Блокировка

Если нужно провести блокировку объекта, с которым проводятся непосредственные операции чтения-записи, то открывать файл «писарем» потребуется в специальном режиме. Режимы ‘w’ и ‘w+’ тут не подходят, т.к. до получения блокировки, содержимое файла менять нельзя.

Для полноты примера, приведу код потока-читателя:

Блокировка с тайм-аутом

По умолчанию flock() ждет получения блокировки. Сколько продлится ожидание не известно, но можно использовать флаг LOCK_NB, чтобы не ждать, а самим решать, что делать дальше.

В данном примере ожидание продлится не более 50 мсек.

Если еще остались вопросы — пишите в комментариях. :)

Мало букафф? Читайте есчо !

Разбить строку на буквы в PHP

Январь 13, 2017 г.

Это задача - классика алгоритмов. В каждом языке программирования есть свои особенности. Для паскаля, к примеру, строка - это массив символов, потому ...

Читать

Получение превью (картинки) для видео vimeo

Август 23, 2019 г.

Рассмотрим как получить thumbnail для видео vimeo, если у вас есть только url видоса. Vimeo позволяет извлечь мета информацию о видео, используя video id. Потому мы сначала выделим id, а потом выполним запрос к API Vimeo за дополнительной информацией, ...

Читать

Валидатор ip адреса на PHP

Ноябрь 13, 2015 г.

Пример хелпера-валидатора на PHP для проверки формата ip адреса. [crayon-6a4b4594d46f0182383288/] Функция проверяет является ли формально строка ip-адресом по протоколам ipv4 или ipv6. Возвращает булево значение. Возможно применение этого кода ...

Читать

Читаем курсы валют, реализация для drupal

Декабрь 5, 2012 г.

Как я писал ранее, хороший информ-сервис, это не куча вариантов виджетов для вашего сайта, а, в наиболее ценном случае, возможность грузить данные информ-сервиса в виде xml. В развитом случае, это целый API для разработчика, с возможностью выборки данных ...

Читать
 

Комментарии к «Как пользоваться flock()?»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: