Является ли SPLFileObject атомарным? - PullRequest
2 голосов
/ 13 июня 2010

Мне интересно, являются ли методы PHP SPLFileObject атомарными (например, потокобезопасными) или нет?

Если нет, я реализую свой собственный класс, который будет использовать flock(),но достаточно ли этого?Функция flock действительно поточно-ориентированная?Что, если столкновение произойдет после того, как я fopen() файл, но до того, как я flock() это?

1 Ответ

2 голосов
/ 16 июня 2010

Я думаю, что вы неправильно используете термин "потокобезопасный". Потоковая безопасность - это (в основном) разделение ресурсов в поточном коде. В PHP нет потоков, а файловые дескрипторы не являются общими ресурсами. Файлы являются общими ресурсами, хотя. Я думаю, что вы ищете термин " условие гонки " вместо этого.

Что, если столкновение произойдет после того, как я fopen() файл, но до того, как я flock() это?

То же самое произойдет, если вы не используете SPLFileObject. Просто убедитесь, что вы никогда не открываете + усекаете, всегда открываете + добавляете и затем усекаете, как только у вас есть блокировка. Это должна быть стандартная процедура, если вы уже знаете, как работают условия открытия и блокировки файла.

...