Intereting Posts
Добавить параметр POST в fb: кнопка входа Нет результатов с текстовым поиском MongoDB PHP PHP submit не публикует текст из полей ввода, генерируемых JS PHP-анализ недействительного html как отформатировать дату из MYSQL FACEBOOK SDK v4 возвращает пустой адрес электронной почты Использует ли извлечение ($ _ POST) неуверенно? Что определяет, когда объект класса уничтожается в PHP? Повторение данных JSON в php Запрос разрешения с использованием нового PHP SDK (3.XX) Как добавить дополнительные поля и связанные геттеры / сеттеры из внешнего файла в один или несколько объектов Symfony / Doctrine, без наследования? Используйте дефис (-) вместо косой черты (/) или подчеркивания (_) в маршрутах Структуру дерева PHP для категорий и подкатегорий без циклического запроса Кэширование PHP – быстрее ли сохранять в базе данных или создавать файл? Валидаторы Zend и сообщения об ошибках: addValidator и addErrorMessage

php mutilthreading, доступ к переменным массива

Как получить доступ к переменным массива с помощью 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(); } ?> 

Некоторые наблюдения, которые вы найдете полезными:

  • По умолчанию значения по умолчанию для классов не поддерживаются – у zend есть обработчики объектов, но обработчики записей, когда запись объявлена, обработчики объектов явно не подходят для вызова при работе с экземплярами. Чтобы обойти это, задайте значения по умолчанию в конструкторах.
  • Переменные, предназначенные для совместного использования между несколькими контекстами, должны расширять определение pthreads; Объекты pthreads функционируют как объекты, а также ассоциативные массивы и индексированные списки, реализация PHP по умолчанию для этих целей не готова для многопоточности.
  • Синхронизация по объекту полезна только в том случае, если вы собираетесь использовать методы синхронизации в синхронизированном блоке (закрытие / функция в php); только синхронизировать, если вы собираетесь ждать или уведомлять других, ожидающих и объектов

 <?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, прежде чем сообщать о любых ошибках.