2010-06-12 7 views
2

Je me demande si les méthodes des PHPs SPLFileObject sont atomiques (par exemple thread-safe) ou non?Est-ce que SPLFileObject est atomique?

Si ce n'est pas le cas, je vais implémenter ma propre classe, qui utilisera flock(), mais est-ce suffisant? La fonction flock est-elle vraiment sûre pour les threads? Que se passe-t-il si la collision se produit après le fichier fopen(), mais avant le flock()?

Répondre

2

Je pense que vous utilisez abusivement le terme «thread-safe». Thread saftey est (principalement) sur les ressources partagées dans le code threadé. PHP n'a pas de thread, et les handles de fichiers ne sont pas des ressources partagées. Les fichiers sont des ressources partagées, cependant. Je pense que vous cherchez le terme "race condition" à la place.

si la collision se produit après que je fopen() le fichier, mais avant que je flock() il? La même chose qui se produirait si vous n'utilisiez pas SPLFileObject.

Assurez-vous de ne jamais ouvrir + tronquer, toujours ouvrir + ajouter et tronquer une fois que vous avez le verrou. Cela devrait être une procédure standard si vous êtes déjà au courant du fonctionnement de l'ouverture de fichier et des conditions de blocage de la course.