Aynı tekil örneği php script komut satırı çağrısından sonra kullanılabilir olacak?

3 Cevap

Ben (örneğin, Singleton.php) tanımlandığı sınıf ile komut dosyası var. Bu sınıf PHP kılavuzunda olduğu gibi klasik singleton deseni uygular:

 class Singleton   {
    private static $instance;

    public static function getInstance() 
    {
       if (!isset(self::$instance)) {
           $c = __CLASS__;
           self::$instance = new $c;
       }

       return self::$instance;
    }
    public function run() {
        // bunch of "thread safe" operations
    }  }

$inst = Singleton::getInstance(); 
$inst->run();

Soru. Ben komut satırından ('php Singleton.php') iki kez bu komut ararsanız, gerçekten "iş parçacığı güvenli" olması () metodu çalışacak? Bu böyle olmaz gibi görünüyor. Bazı bayrağı depolanan metin dosyası ile tek işlem çalıştırmak taklit etmek için kullanılır, ancak diğer durumlar da olabilir gibi görünüyor. Düşünceleriniz?

3 Cevap

Singletons parçacığı güvenliği ile hiçbir ilgisi yoktur. Sadece süreç başına bir nesnenin bir örneği var burada.

böylece, soru cevap: hayır, script parçacığı güvenli değildir. php cli her çağrı için bir işlem (thread değil) başlayacak. iki süreç kendi sınıfının bir örneğini oluşturur ve her iki dosyayı yazmaya çalışacağım.

Daha sonra dosyayı yazmak için süreç kazanmak ve ilk süreç değişiklikleri üzerine yazılır.

PHP dişli değildir - bu süreç odaklıdır. PHP Her çağırma (wether o komut veya apache örneği olabilir) bellek bağımsızdır.

Sizin tekiz tek o süreci benzersiz olacaktır.

(Oh ve yerine $c=__CLASS__; $instance = new $c; Eğer $instance = new self();. Aynı sonuç, daha az gürültü patırtı gibi 'öz' kullanmanız gerekir yapıyor. Ayrıca özel / koruma) (sizin __ construct ayarlamak için emin olun)

Eğer iki kez (aynı anda, sanırım) komut satırından bu komut dosyasını çalıştırdığınızda, bu nedenle iplik güvenlik bir sorun değildir, tamamen iki ayrı süreçler alacak: Burada konu yok.