【发布时间】:2011-03-03 02:07:10
【问题描述】:
我想知道 PHP SPLFileObject 的方法是否是原子的(例如线程安全的)?
如果不是,我将实现我自己的类,它将使用flock(),但这是否足够?群函数真的是线程安全的吗?如果在我fopen() 文件之后但在我flock() 之前发生冲突怎么办?
【问题讨论】:
我想知道 PHP SPLFileObject 的方法是否是原子的(例如线程安全的)?
如果不是,我将实现我自己的类,它将使用flock(),但这是否足够?群函数真的是线程安全的吗?如果在我fopen() 文件之后但在我flock() 之前发生冲突怎么办?
【问题讨论】:
我认为您误用了“线程安全”一词。线程安全(主要)是关于线程代码中的共享资源。 PHP 没有线程,文件句柄不是共享资源。不过,文件是共享资源。我认为您正在寻找“race condition”这个词。
如果在我
fopen()文件之后但在我flock()之前发生冲突怎么办?
如果您不使用 SPLFileObject,也会发生同样的事情。只要确保你从不打开+截断,总是打开+追加,然后在你有锁后截断。如果您已经了解文件打开和锁定竞争条件的工作原理,这应该是标准程序。
【讨论】: