Взаимно блокируемые функции не блокируют. Они являются атомарными, означая, что они могут завершиться без возможности контекстного переключения во время инкремента. Таким образом, нет никакого шанса мертвой блокировки, или ожидать.
я сказал бы, что необходимо всегда предпочитать его блокировке и инкременту.
Энергозависимый полезно, если Вам нужны записи в одном потоке, который будет считан в другом, и если Вы хотите, чтобы оптимизатор не переупорядочил операции на переменной (потому что вещи происходят в другом потоке, который оптимизатор не знает о). Это - ортогональный выбор к тому, как Вы увеличиваете.
Это - действительно хорошая статья, если Вы хотите читать больше о коде без блокировок и правильном способе приблизиться к записи ее
Вы можете использовать отладчик, такой как xdebug, и пройтись по вашему коду, который, как вы подозреваете, содержит бесконечный цикл.
Xdebug - Инструмент отладчика и профилировщика для PHP
Вы также можете установить
max_execution_time
, чтобы ограничить время записи бесконечного цикла до сбоя.
Иногда я считаю, что самый безопасный метод - это включить проверку предела в цикл. Тип конструкции цикла не имеет значения. В этом примере я выбрал оператор while:
$max_loop_iterations = 10000;
$i=0;
$test=true;
while ($test) {
if ($i++ == $max_loop_iterations) {
echo "too many iterations...";
break;
}
...
}
Разумное значение для $ max_loop_iterations может быть основано на:
Надеюсь, это поможет, - N
написать простой код, чтобы ошибки были более очевидными? Интересно, не является ли ваш бесконечный цикл следствием какого-то нелепого клубка управляющих структур, который ни один человек не может понять. Таким образом, вы, конечно, нашли это.
все бесконечные циклы неплохи (например, while (! Quit)
).
Модульные тесты тоже могут быть хорошей идеей. Вы можете попробовать PHPUnit.
можно ли отследить выполнение и выгрузить граф вызовов? бесконечные циклы будут очевидны, и вы можете легко выбрать те, которые созданы специально (огромный основной цикл) против случайности (локальный цикл abababa ... цикл или цикл, который никогда не возвращается в основной цикл)
Я слышал о программное обеспечение, которое делает это для больших сложных программ, но я не смог найти для вас снимок экрана. Кто-то отследил такую программу, как 3dsmax, и выгрузил действительно красивый граф вызовов.