Все соответствующие предупреждения приведены в документах IPC::Shareable. Если несколько процессов попытаются одновременно изменить значение одной и той же разделяемой переменной, могут возникнуть некоторые проблемы. Несколько рискованной является даже такая простая операция, как $Н{‘key’ }++, поскольку сама операция ++ выполняется в несколько этапов: происходит выборка текущего значения, его наращивание и запись обратно в хеш. Если несколько процессом попытаются изменить это значение до того, как закончится выполнение операции, то все внесенные изменения будут перекрыты. Самым простым решением является блокировка хеша перед выполнением многоэтапной операции обновления и снятия блокировки после ее завершения. Если в качестве операционной системы установлена Windows , то разделяемая память может быть недоступна из среды Perl. Ниже показана общая схема.
tied(%Н)->shlock;
$Н{‘key’}++;
tied(%Н)->shunlock;
Метод tied ( ) возвращает ссылку на объект, которая хранится в самом IPC::Shareable. Этот объект имеет только два общедоступных метода: shlock () и shunlock () .Первый метод блокирует переменную так, чтобы к ней не могли получить доступ другие процессы, а второй — снимает блокировку. Эти методы не имеют непосредственного отношения к функции lock (), используемой в многопотоковой обработке, или к функции flock (), которая применялась ранее для упорядочения доступа к функции accept ().
Скалярные переменные также могут быть связаны с разделяемой памятью с использованием аналогичного интерфейса. Связанные массивы в настоящее время не поддерживаются. Ниже будет приведена новая версия адаптивного Web-cepeepa с предварительным ветвлением, в которой используется модуль IPC::Shareable.