- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Параллельное и распределенное программирование на С++ - Хьюз Камерон
Шрифт:
Интервал:
Закладка:
Тогда как функции pvm_recv (), pvm_nrecv () и pvm_trecv () принимают сооб щ ения в новый активный буфер, функция pvm_precv () принимает сооб щ ение непосредственно в буфер, определенный пользователем. Параметр taskid содержит идентификатор задачи-отправителя. Параметр messageid идентифицирует получаемые сооб щ ения. Параметр buffer должен содержать реально принятое сооб щ ение. Поэтому вместо получения сооб щ ения из активного буфера с по м о щ ью одной из функций распаковки, сооб щ ение считывается напрямую из пара м етра buffer. Параметр size содержитдлину сооб щ ения в байтах. Параметр type определяет тип данных, содержа щ ихся в сооб щ ении. Параметр type может иметь следую щ ие значения:
PVM_STR PVM_BYTE
PVM_SHORT PVM_INT
PVM_FLOAT PVM_DOUBLE
PVM_LONG PVM_USHORT
PVM_CPLX PVM_DCPLX
PVM_UINT PVM_ULONG
Функция pvm_trecv() позволяет программисту организовать процедуру получения сооб щ ений с ограничением по времени. Эта функция заставляет вызываю щ ую задачу перейти в заблокированное состояние и ожидать прихода сооб щ ения, но лишь в течение промежутка времени, заданного параметром timeout. Этот параметр представляет собой струкгуру типа timeval, определенную в заголовке time.h, например:
#include «pvm3.h» //. . .
struct timeval TimeOut; TimeOut.tv_sec = 1000; int TaskId; int MessageId;
TaskId = pvm_parent(); MessageId = 2;
pvro_trecv(TaskId,MessageId, &TimeOut) ; //...
Здесь переменная TimeOut содержит член tv_sec, установленный равным ЮОО с. Структуру timeval можно использовать для установки временных значений в секундах и микросекундах. Структура timeval имеет следую щ ий вид:
struct timeval{
long tv_sec; // секунды
long tv_usec; // микросекунды
};
Этот пример означает, что функция pvm_trecv () заблокирует вызываю щ ую задачу максимум на 1000c. Если сооб щ ение будет получено до истечения заданных ЮОО с, функция сразу завершится. Функцию pvm_trecv () можно использовать для предотвращения бесконечных задержек и взаимоблокировок. При успешном выполнении функция pvm_trecv( ) возвра щ ает номер нового активного буфера, в противном случае (при возникновении ошибки) — отрицательное значение. Если taskid = -1, функция примет сооб щ ение от любого отправителя. Если messageid = -1, функция примет любое сооб щ ение.
Функция pvm_probe () определяет, поступило ли сооб щ ение, заданное параметром messageid, от отправителя, заданного параметром taskid. Если функция pvm_probe () «видит» указанное сооб щ ение, она возвра щ ает номер нового активного буфера. Если заданное сооб щ ение не прибыло, функция возвра щ ает число О. При возникновении сбоя функция возвра щ ает отрицательное значение.
Синопсис
#include «pvm3 .h»
int pvm_getsbuf (void) ;
int pvm_getrbuf (void) ;
int pvm_setsbuf(int bufferid);
int pvm_setrbuf(int bufferid);
int pvm_mkbuf(int Code);
int pvm_freebuf(int bufferid);
В библиотеке PVM предусмотрено шесть полезных функций управления буферами, которые можно использовать для установки, идентификации и динамического создания буферов отправки и приема. Функция pvm_getsbuf () используется для получения номера активного буфера отправки. Если теку щ его буфера отправки не существует, функция возвра щ ает число 0. Функция pvm_getrbuf () используется для получения идентификационного номера активного буфера приема. Следует иметь в виду, что при каждом получении сооб щ ения создается новый активный буфер, а теку щ ий буфер очи щ ается. Если теку щ его буфера приема не су щ ествует, функция возвра щ ает число 0. Функция pvm_setsbuf () устанавливает параметр bufferid равным номеру активного буфера отправки. Обычно PVM-задача имеет только один буфер отправки. Но иногда возникает необходимость в нескольких таких буферах. Хотя в любой момент времени активным может быть только один буфер отправки, PVM-задача может создавать дополнительные буфера отправки с по м о щ ью функции pvm_mkbuf (). Функцию pvm_setsbuf () можно использовать для установки в качестве активного буфера одного из буферов отправки, которые были созданы во время работы приложения. Эта функция возвра щ ает идентификатор предыду щ его активного буфера отправки. Функция pvm_setrbuf () устанавливает активный буфер прие м а равны м значению bufferid. По м ните, что PVM-функции распаковки работают с активны м буферо м прие м а. Если су щ ествует несколько буферов, функция pvm_setrbuf () позволит при м енить теку щ ий буфер д л я использования функция м и распаковки. При успешно м выполнении функция pvm_setrbuf () возвра щ ает идентификатор предыду щ его активного буфера. Если идентификатора буфера, переданного функции pmv_setrbuf (), не су щ ествует или он оказался недействительны м, функция возвратит одно из следую щ их сооб щ ений об ошибке: PvmBadParam или PvmNoSuchbuf. Функция pvm_mkbuf () используется для создания нового буфера сооб щ ений. Пара м етр Code определяет фор м ат данных, которые будут содержаться в это м буфере: XDR, собственный фор м ат компьютера или формат, использую щ ий указатели и размеры. Поэтому пара м етр Code мо-жет содержать одно из трех значений:
PvmDataDefault XDR
PvmDataRaw В зависи м ости от м арки ко м пьютера (без кодирования)
PvmDataInPlace Используются только указатели на данные и их размер
При успешном выполнении функция pvm_mkbuf () возвра щ ает идентификатор нового активного буфера, в противном случае — отрицательное значение. Для каждого обра щ ения к функции pvm_mkbuf () , если буфер отправки больше не будет нужен, необходи м о вызвать функцию pvm_freebuf () , которая освободит память, выделенную функцией pvm_mkbuf (). Функцию pvm_freebuf () с л едует испо л ьзовать то л ько в случае, когда сооб щ ение уже отправлено и в буфере нет никакой необходимости.
Доступ к стандартному входному потоку (stdin) и стандартному выходному потоку (stdout) со стороны PVM-задач
Среда PVM связывает воедино коллекцию ко м пьютеров и представляет их для програ мм ы в виде одной логической машины с нескольки м и процессора м и. При этом возникают следующие вопросы. Какой ко м пьютер в PVM-среде должен действовать как консоль? Где будут отображаться данные, выводи м ые PVM-задачей в объект cout типа ostream? Если PVM-задача попытается принять данные с клавиатуры, то с какой и м енно клавиатуры она должна их считывать? Выходной поток stdout для каждо г о сыновнего процесса перехватывается и отправляется назначенной PVM-задаче в виде PVM-сооб щ ения. Каждый сыновний процесс наслелует инфор м ацию, которая определяет, какая за д ача д олжна принять д анные, записанные в поток stdout, и как эти д анные д о л жны быть и д ентифицированы. Вхо д ной поток каж д ого сыновнего процесса связан с устройство м /dev/null. Все, что записано в устройство /dev/null, теряется. Если устройство /dev/null открыто д л я чтения, возвра щ ается эквивалент признака конца файла. Это означает, что ко д сыновних процессов не д олжен соз д аваться в расчете на считывание вхо д ных д анных из стан д артного потока stdin (cin) или назапись выходных д анных в стан д артный поток stdout (cout). При этом потоки stdin и stdout д ля ро д ительской задачи ве д ут себя вполне ожи д аемым образом. PVM-задачи для взаимодействия между собой должны использовать сооб щ ения. Это значит, что входные данные можно принимать из сооб щ ений, каналов, об щ ей (разделяемой) памяти, переменных среды, ар г ументов командной строки или файлов. И точно так же выходные данные можно записывать в сооб щ ения, каналы, общую память и файлы.
