Повторно используемые блокировки в C#

Ничего не видно. Страница пуста и белая.

Также известна как Белая страница смерти или Белый экран смерти . Это происходит, когда отчет об ошибках отключен, и произошла фатальная ошибка (часто синтаксическая ошибка).

Если вы включили протоколирование ошибок, вы найдете конкретное сообщение об ошибке в своем журнале ошибок. Обычно это будет в файле php_errors.log, либо в центральном месте (например, /var/log/apache2 во многих средах Linux), либо в самом каталоге самого скрипта (иногда используется в среде совместного размещения).

Иногда может быть более простым временно отображать ошибки. На белой странице отобразится сообщение об ошибке. Будьте осторожны, потому что эти ошибки видны всем, кто посещает веб-сайт.

Это легко сделать, добавив в начале скрипта следующий код PHP:

ini_set('display_errors', 1); error_reporting(~0);

Код включит отображение ошибок и установит отчетность на самый высокий уровень.

Поскольку во время выполнения ini_set() он не влияет на синтаксические ошибки синтаксиса. Эти ошибки появятся в журнале. Если вы хотите также отобразить их на выходе (например, в браузере), вам необходимо установить директиву display_startup_errors на true. Сделайте это либо в php.ini, либо в .htaccess или любом другом методе, который влияет на конфигурацию перед временем выполнения .

Вы можете использовать те же методы для установки параметра log_errors и error_log , чтобы выбрать ваше собственное место в файле журнала.

Если вы посмотрите в журнале или используете дисплей, вы получите гораздо лучшее сообщение об ошибке и строка кода, где ваш скрипт останавливается.

Похожие вопросы:

Связанные ошибки:

116
задан Kirill Kobelev 11 May 2017 в 01:02
поделиться

3 ответа

Нет, не, пока Вы соединяете тот же объект. Рекурсивный код эффективно уже имеет блокировку и, продолжаются беспрепятственный - также.

lock(object) {...} стенография для использования Монитор класс. Как Marc указывает , Monitor позволяет повторная входимость , так повторенные попытки соединить объект , на котором текущий поток уже имеет блокировку , будет работать просто великолепно.

, Если Вы начинаете соединяться отличающийся объекты, именно тогда необходимо быть осторожными. Обратите особое внимание на:

  • Всегда получают, соединяет данное количество объектов в той же последовательности.
  • Всегда выпуск привязывается реверс последовательность к тому, как Вы получаете их.

при повреждении любого из этих правил Вы, как в значительной степени гарантируют, получите проблемы мертвой блокировки в какой-то момент .

Вот одна хорошая веб-страница, описывающая синхронизацию потока в.NET: http://dotnetdebug.net/2005/07/20/monitor-class-avoiding-deadlocks/

кроме того, соедините как можно меньше объектов за один раз. Рассмотрите применение крупномодульные блокировки , если это возможно. Идея, являющаяся, что, если можно записать код, таким образом, что существует граф объектов и можно получить, соединяет корень того графа объектов, затем сделайте так. Это означает, что Вы имеете, каждый соединяет тот корневой объект и поэтому не должен волноваться так о последовательности, в которой Вы получаете/выпускаете блокировки.

(Одно дальнейшее примечание, Ваш пример не является технически рекурсивным. Для него, чтобы быть рекурсивным, Bar() должен был бы назвать себя, обычно как часть повторения.)

143
ответ дан Community 24 November 2019 в 02:17
поделиться

Ну, Monitor позволяет повторную входимость, таким образом, Вы не можете завести в тупик себя... так нет: это не должно делать

19
ответ дан Marc Gravell 24 November 2019 в 02:17
поделиться

Если поток будет уже содержать блокировку, то он не заблокирует себя..Net платформа гарантирует это. Только необходимо удостовериться, что два потока не делают попытку к aquire тех же двух блокировок из последовательности любыми путями выполнения кода.

тот же поток может aquire та же блокировка многократно, но необходимо удостовериться, что Вы выпускаете блокировку то же количество раз что Вы aquire это. Конечно, пока Вы используете ключевое слово "блокировки" для выполнения этого, это происходит автоматически.

6
ответ дан Jeffrey L Whitledge 24 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: