Как получить доступ к переменным массива с помощью pthread, я создал имена классов потоков «AccessVariable» , whoose task – создать 4 потока и получить доступ к массиву с именем «$ arr» , нужен некоторый указатель на то, как это сделать, поскольку я очень новый в этом кодировании
<?php error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true); class AccessVariable extends Thread { public $arr = array("12","33","21","3211","3214","34","23423"); public function __construct($arg) { $this->arg = $arg; } public function run() { if ($this->arg) { $tmp_value = $this->getValue(); printf('%s: %s %d -finish' . "\n", date("g:i:sa"), $this->arg, $tmp_value); } $this->synchronized(function($thread) { $thread->getValue(); }, $this); } public function getValue() { //Get Array Variable } } // Create a array $stack = array(); //Iniciate Miltiple Thread foreach (range("A", "D") as $i) { $stack[] = new AccessVariable($i); } // Start The Threads foreach ($stack as $t) { $t->start(); } ?>
Некоторые наблюдения, которые вы найдете полезными:
–
<?php error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true); class SharedArray extends Stackable { public function __construct($array) { $this->merge($array); } public function run(){} } class AccessSharedArray extends Thread { public $shared; public $arg; public function __construct($shared, $arg) { $this->shared = $shared; $this->arg = $arg; } public function run() { if ($this->arg) { $tmp_value = $this->shared[$this->arg]; printf('%s: %s %d -finish' . "\n", date("g:i:sa"), $this->arg, $tmp_value); } } } $shared = new SharedArray( array("12","33","21","3211","3214","34","23423")); // Create a array $stack = array(); foreach (range(0, 3) as $i) { $stack[] = new AccessSharedArray($shared, $i); } // Start The Threads foreach ($stack as $t) { $t->start(); } foreach ($stack as $t) $t->join(); ?>
Есть много примеров на github и включены в дистрибутив, чтобы помочь вам узнать pthreads достаточно хорошо, чтобы использовать его. Многопоточность не похожа на использование новой базы данных или клиента http. Это сложный и мощный, я умоляю вас внимательно и полностью прочитать каждый пример, даже если вы считаете, что это не имеет отношения к задаче; знание хорошо вам поможет.
В дополнение к примерам в прошлых отчетах об ошибках в github много информации, поэтому, если у вас есть проблема, и в примере нет никакого решения, выполните поиск в списке проблем github, прежде чем сообщать о любых ошибках.