Seems like some operators dont work.f.e. $thread->array[] = 1; failsa simple test:<?phpclass My extends Thread{ public $array = array('default val 1', 'default val 2'), $msg = 'default', $stop = false; public function run() { while(true) { echo $this->msg . PHP_EOL; if(count($this->array) > 0){ foreach($this->array as $val){ var_dump($val); } $this->array = array(); } /** cause this thread to wait **/ $this->synchronized( function($thread){ if(count($this->array) < 1){ $thread->wait(); } }, $this ); echo PHP_EOL; if($this->stop){ break; } } // while }}$my = new My();$my->start();sleep(1); // wait a bit// test 1 - $thread->array[] = 1;$my->synchronized( function($thread){ $thread->msg = 'test 1'; $thread->array[] = 1; $thread->notify(); }, $my);sleep(1); // wait a bit// test 2 - array_push($thread->array, 2);$my->synchronized( function($thread){ $thread->msg = 'test 2'; array_push($thread->array, 2); $thread->notify(); }, $my);sleep(1); // wait a bit// test 3 - array_push($thread->array, 2);$my->synchronized( function($thread){ $thread->msg = 'test 3'; $new = array(3); $thread->array = array_merge($thread->array, $new); $thread->notify(); }, $my);sleep(1); // wait a bit$my->stop = true;?>out:defaultstring(13) "default val 1"string(13) "default val 2"test 1test 2test 3int(3)so in this case only array_merge() worked.