我想知道PHP SPLFileObject的方法是否是原子的(例如线程安全的)?
如果不是,我将实现我自己的类,它将使用flock()
,但这足够了吗? flock功能真的是线程安全的吗?如果在我fopen()
文件之后但在我flock()
之前发生碰撞会怎么样?
答案 0 :(得分:2)
我认为你误用了“线程安全”一词。线程安全(主要)是关于线程代码中的共享资源。 PHP没有线程,文件句柄不是共享资源。但是,文件是共享资源。我认为你正在寻找“race condition”一词。
如果在我
fopen()
文件之后但在我flock()
之前发生了碰撞怎么办?
如果你没有使用SPLFileObject会发生同样的事情。只要确保你永远不会打开+ truncate,总是打开+追加,然后在你拥有锁之后截断。如果您已经知道文件打开和锁定竞争条件如何工作,那么这应该是标准程序。