没有锁的节俭PHP单例


Thrift PHP singleton without locks?

我来自c++世界。

最近,我开始使用Apache Thrift, RPC框架。我正在写PHP客户端代码和Python服务器代码。

当我阅读PHP实现时,我发现以下内容:

class TStringFuncFactory {
private static $_instance;
/**
 * Get the Singleton instance of TStringFunc implementation that is
 * compatible with the current system's mbstring.func_overload settings.
 *
 * @return TStringFunc
 */
public static function create() {
    if(!self::$_instance) {
        self::_setInstance();
    }
    return self::$_instance;
}
....
}

是没有锁的单例。

<标题>

PHP的处理模式是什么?

是否能保证这种情况不会发生?

+1

PHP (cli或http)作为单个cpu核心上的单个线程存在,除非您做一些实际的工作使您的应用程序多线程。

如何在PHP应用中使用多线程

对于HTTP端,每个PHP执行都伴随着请求周期而生和死。服务器可以并发地处理多个请求,这将导致多个并发的PHP执行,但是每个请求都是完全独立的。

所以基本上这不是问题。无论出于何种目的,检查静态数据成员是否满足单例模式。