在 PHP 中实现线程安全的单例模式,可以使用双重检查锁定(Double-Checked Locking)方法
class Singleton {
private static $instance;
private static $lock = false;
private function __construct() {}
public static function getInstance() {
if (self::$instance === null) {
if (!self::$lock) {
self::$lock = true;
if (self::$instance === null) {
self::$instance = new Singleton();
}
self::$lock = false;
} else {
while (self::$lock) {
// 等待获取锁
}
}
}
return self::$instance;
}
}
这个实现方法中,我们首先检查 $instance
是否为 null
。如果为 null
,则尝试获取锁。如果成功获取锁,我们再次检查 $instance
是否为 null
,如果仍然为 null
,则创建一个新的 Singleton
对象。释放锁后,返回 $instance
。如果没有获取到锁,则进入循环等待,直到获取到锁为止。
这种实现方式可以确保在多线程环境下的线程安全,同时避免了不必要的同步开销。