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

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

Реклама

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

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

cond_broadcast ($variable)

Функция cond_broadcast () действует аналогично функции cond_signal (), за исключением того, что активизируются все ожидающие потоки. Каждый поток по очереди снова приобретает блокировку и выполняет код, который следует за вызовом функции cond_wait ().  Порядок, в котором будет происходить активизация ожидающих потоков, не определен.

Применение функций cond_wait () и cond_broadcast () описано будет дальше па примере разработки адаптивного сервера с предварительным формированием потоков.

Потоки и сигналы.

Разработчики, которые планируют применять потоки в сочетании с сигналами, должны учитывать, что интеграция средств обработки сигналов со средствами мно­гопоточной обработки относится к одной из наименее опробованных частей экспе­риментальной реализации потоков Perl. Проблема состоит в том, что время поступления сигналов является непредсказуемым и они могут быть доставлены в любой поток, выполняемый в данный момент, что приводит к неопределенным результатам.

Предполагается, что решение этой проблемы может быть достигнуто с помощью модуля Thread::Signal, который обеспечивает доставку всех сигналов в специальный поток, работающий параллельно с основным. Для его использования не нужно предпринимать каких-либо особых действий. Для запуска сигнального потока достаточно загрузить этот модуль.

use Thread::Signal;

Однако следует учитывать, что модуль Thread::Signal изменяет семантику сигналов, в результате чего их нельзя больше использовать для прерывания продолжительных системных вызовов. Поэтому следующий прием становится неприемлемым.

alarm (10);
my $bytes = eval {
local $SIG{ALRM) = sub { die }; sysread($socket,$data,1024);
};

В некоторых случаях можно обойти это ограничение, заменив раздел eval {} вызовом функции select (). Такой прием будет также описан в дальнейшем.



2014-06-21 20:33:37

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


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


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


РЕКОМЕНДУЕМ

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