У меня есть следующий PHP код:Share массив между Pthreads
<?php
class StackableAr extends Stackable{
public function run(){}
}
class MyThread1 extends Thread{
public $settings;
public function __construct($settings){
$this->settings = $settings;
}
public function run(){
print "thread1: start\n";
for($n = 0; $n < 8; $n++){
print "thread1: $n\n";
if($n == 2){
print_r($this->settings);
}
elseif($n == 4){
$this->settings['test2'] = new StackableAr();
$this->settings['test2']['attr2'] = 'string2';
$this->settings['test3'] = 'string3';
}
elseif($n == 6){
print_r($this->settings);
}
sleep(1);
}
print "thread1: end\n";
}
}
class MyThread2 extends Thread{
public $settings;
public function __construct($settings){
$this->settings = $settings;
}
public function run(){
print "thread2: start\n";
for($n = 0; $n < 10; $n++){
print "thread2: $n\n";
if($n == 8){
print_r($this->settings);
}
sleep(1);
}
print "thread2: end\n";
}
}
$settings = new StackableAr();
$settings['test1'] = new StackableAr();
$settings['test1']['attr1'] = 'string1';
$myThread1 = new MyThread1($settings);
$myThread2 = new MyThread2($settings);
$myThread1->start();
$myThread2->start();
for($n = 0; $n < 12; $n++){
print "main: $n\n";
sleep(1);
}
?>
Как я могу сделать $this->settings['test2']
сохраняться, даже если thread1 больше не существует. Я сделал это как pthread PHP example note говорит: Вы можете и должны использовать Stackable в качестве базового объекта для всех массивов, которые вы хотите передать другим направлениям
$this->settings['test3']
сохраняется после того, как thread1 закончился. Но почему не $this->settings['test2']
?
Ok. Понимаю. Таким образом, это относится только к объектам, не предназначенным для строк? – TheFox
Точнее, только объекты, которые спускаются с pthreads. Объекты, которые не спускаются с pthreads, сериализуются при хранении, поэтому их можно восстановить после того, как контекст, который их создал, исчез. –