2010-06-12 50 views
2

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

如果不是,我將實現我自己的類,將使用flock(),但是這還不夠嗎?羊羣函數真的是線程安全的嗎?如果發生碰撞後我該怎麼辦?fopen()該文件,但之前我flock()呢?

回答

2

我想你誤用術語「線程安全的。」線程安全(主要)是線程代碼中的共享資源。 PHP沒有線程,文件句柄不是共享資源。不過,文件是共享資源。我想你正在尋找術語「race condition」。

如果發生碰撞後我怎麼辦我fopen()這個文件,但之前我flock()呢?

如果不使用SPLFileObject,會發生同樣的情況。只要確保你永遠不會打開+ truncate,總是打開+ append,然後在鎖定後截斷。如果您已經意識到文件打開和鎖定競爭條件如何工作,這應該是標準程序。