Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (34 – Многопоточные приложения, часть 6)

предыдущая часть ««»» следующая часть

Функция lock () создает “рекомендательную” блокировку переменной, соблюдение которой обусловлено обоюдным соглашением. Рекомендательная блокировка исключа­ет возможность вызова другим потоком функции lock ( ) для блокировки переменной до тех пор, пока поток, владеющий блокировкой в настоящее время, ее не освободит. Однако эта блокировка не предотвращает доступа к самой переменной, чтение и запись которой может осуществляться потоком, даже если он не владеет блокировкой, связан­ной с этой переменной. Блокировки обычно применяются для предотвращения попыток двух потоков обновить одну и туже переменную одновременно.

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

Если есть необходимость изменить значения сразу нескольких переменных, то обычно создается независимая переменная, назначение которой состоит только управлении доступом к этому ряду переменных. В следующем примере переменная ok_to_update служит в качестве средства блокировки для двух взаимосвязанных переменных, $bytes_sent и $bytes_left,

$bytes_sent и $bytes_left,
my $оk_to_update;
sub send_data {
my $data =shift
my $bytes = $socket->syswrite ($data) ;
lock ($ok_to_update) ;
$bytes_sent += $bytes;
$bytes_left -= $bytes;
}

Можно также заблокировать всю подпрограмму с использованием конструкции lock (&subroutine). Если подпрограмма заблокирована, она может выполняться только потоком, владеющим блокировкой. Такой метод рекомендуется только для подпрограмм, которые выполняется очищение; в ином случае многочисленные потоки выстроятся в очередь к этой подпрограмме, как автомобили перед светофором, и основные преимущества потоков будут сразу же перечеркнуты.



2014-06-20 14:02:52

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2024 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония