Мне интересно, являются ли методы PHP SPLFileObject атомарными (например, потокобезопасными) или нет?
Если это не так, я реализую свой собственный класс, который будет использовать flock()
, но этого достаточно? Действительно ли функция стаи является потокобезопасной? Что делать, если столкновение происходит после того, как я fopen()
файл, но прежде чем я flock()
это?
Я думаю, вы злоупотребляете термином «поточно-безопасный». Thread saftey (в основном) об общих ресурсах в многопоточном коде. PHP не имеет потоков, и файловые дескрипторы не являются общими ресурсами. Однако файлы являются общими ресурсами. Я думаю, что вы ищете вместо этого термин « состояние гонки ».
Что делать, если столкновение происходит после того, как я
fopen()
файл, но прежде чем яflock()
это?
То же самое произойдет, если вы не используете SPLFileObject. Просто убедитесь, что вы никогда не открываете + усекать, всегда открываете + добавьте, а затем обрезаете, как только у вас есть блокировка. Это должна быть стандартная процедура, если вы уже знаете, как работают условия открытия и блокировки файлов.