2010-06-12 100 views
2

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

如果不是,我将实现我自己的类,将使用flock(),但是这还不够吗?羊群函数真的是线程安全的吗?如果发生碰撞后我该怎么办?fopen()该文件,但之前我flock()呢?

回答

2

我想你误用术语“线程安全的。”线程安全(主要)是线程代码中的共享资源。 PHP没有线程,文件句柄不是共享资源。不过,文件是共享资源。我想你正在寻找术语“race condition”。

如果发生碰撞后我怎么办我fopen()这个文件,但之前我flock()呢?

如果不使用SPLFileObject,会发生同样的情况。只要确保你永远不会打开+ truncate,总是打开+ append,然后在锁定后截断。如果您已经意识到文件打开和锁定竞争条件如何工作,这应该是标准程序。