Потокобезопасность глобальных переменных в Perl

У меня есть следующие вопросы:

  1. Как выполняется глобальный код и инициализируются глобальные переменные в perl?
  2. Если я пишу use package_name; в нескольких пакетах глобальный код выполняется каждый раз?
  3. Определены ли глобальные переменные таким образом, безопасным для потоков?

person prashanthkvs    schedule 04.03.2013    source источник


Ответы (1)


Perl делает полную копию всего кода и переменных для каждого потока. Связь между потоками осуществляется через специально помеченные общие переменные (которые на самом деле не являются общими - остается копией в каждом потоке, но все копии обновляются). Это существенно отличается от модели многопоточности, используемой во многих других языках, поэтому вопросы безопасности потоков отличаются — в основном они сосредоточены на том, что происходит, когда объекты копируются для создания нового потока, и эти объекты имеют некоторую форму ресурса для чего-то вне программы ( например подключение к базе данных).

Насколько я понимаю, ваш вопрос о use на самом деле не связан с темами? use делает несколько вещей; один загружает указанный модуль и запускает в нем любой код верхнего уровня; это происходит только один раз для каждого модуля, а не один раз для оператора использования.

person ysth    schedule 04.03.2013