SPLFileObject是原子的吗?

时间:2010-06-12 21:15:48

标签: php atomicity

我想知道PHP SPLFileObject的方法是否是原子的(例如线程安全的)?

如果不是,我将实现我自己的类,它将使用flock(),但这足够了吗? flock功能真的是线程安全的吗?如果在我fopen()文件之后但在我flock()之前发生碰撞会怎么样?

1 个答案:

答案 0 :(得分:2)

我认为你误用了“线程安全”一词。线程安全(主要)是关于线程代码中的共享资源。 PHP没有线程,文件句柄不是共享资源。但是,文件是共享资源。我认为你正在寻找“race condition”一词。

  

如果在我fopen()文件之后但在我flock()之前发生了碰撞怎么办?

如果你没有使用SPLFileObject会发生同样的事情。只要确保你永远不会打开+ truncate,总是打开+追加,然后在你拥有锁之后截断。如果您已经知道文件打开和锁定竞争条件如何工作,那么这应该是标准程序。