Почему этот пример Segfault?

Я заметил в этот пример аннотация, которая $this->rows[]=$row; в строке 15 будет сегфо. Но я не понимаю почему. Может ли кто-нибудь объяснить это мне?

0

Решение

Он будет либо неисправен, либо будет вести себя неожиданно (текущие версии не должны отказывать).

Причина в том, что член $this->rows не является потокобезопасным массивом, это обычный массив.

Обычные массивы сериализуются для хранения как элемент объекта, поэтому

$this->array[] = $row;

Не имеет смысла; Вы не можете добавить в сериализованный массив.

В примере это строит $rows в области видимости метода и устанавливает член объекта сразу с $this->rows = $rows;,

Потокобезопасный массив, который является многопоточным объектом (все они ведут себя как массивы и имеют некоторые разумные методы манипулирования, такие как pop и shift), не имеет одинакового ограничения.

2

Другие решения

Согласно порицание инструмент на Github, мы должны попробовать пейджинг Джо Уоткинс (@Krakjoe) …

Редактировать: самостоятельно, «нехватка памяти» является лучшей идеей, которую я могу придумать. (Погуглил строку, о которой идет речь, единственный полезный результат касался низкого предела памяти)

0

По вопросам рекламы [email protected]