Камерон Хьюз - Параллельное и распределенное программирование на С++

Тут можно читать онлайн Камерон Хьюз - Параллельное и распределенное программирование на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом «Вильямс», год 2004. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Параллельное и распределенное программирование на С++
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом «Вильямс»
  • Год:
    2004
  • Город:
    МоскваСанкт-ПетербургКиев
  • ISBN:
    ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Камерон Хьюз - Параллельное и распределенное программирование на С++ краткое содержание

Параллельное и распределенное программирование на С++ - описание и краткое содержание, автор Камерон Хьюз, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Здесь описаны простые методы программирования параллельных виртуальных машин и основы разработки кластерных приложений. Эта книга не только научит писать программные компоненты, предназначенные для совместной работы в сетевой среде, но и послужит надежным «путеводителем» по стандартам для программистов, которые занимаются многозадачными и многопоточными приложениями. Многолетний опыт работы привел авторов книги к использованию агентно-ориентированной архитектуры, а для минимизации затрат на обеспечение связей между объектами системы они предлагают применить методологию «классной доски».
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.

Параллельное и распределенное программирование на С++ - читать онлайн бесплатно полную версию (весь текст целиком)

Параллельное и распределенное программирование на С++ - читать книгу онлайн бесплатно, автор Камерон Хьюз
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

int Value = 2004;

pvm_stream MyStream;

//...

MyStream << Value;

//.. .

Оператор извлечения данных (>>) используется подобным образом, но для получения сообщений от PVM-задач. В действительности оператор ">>" заключает в оболочку функции pvm_recv() и pvmupk(). Определение этого операторного м етода выглядит так.

// Листинг 11.14. Определение оператора для класса

// pvm_stream

pvm_stream &pvm_stream::operator>>(int &Data) {

int BufId;

//. . .

BufId = pvm_recv(TaskId,MessageId);

StreamState = pvm_upkint(&Data,l,l); //.. .

return(*this);

}

Этот тип определения позволяет получать сообщения от PVM-задач с помощью оператора извлечения данных.

int Value;

pvm_stream MyStream;

MyStream >> Value;

Поскольку каждый из рассмотренных операторных методов возвращает ссылку на тип pvm_stream, операторы вставки и извлечения можно соединить в цепочку.

Mystream << Valuel << Value2;

Mystream >> Value3 >> Value4;

Используя этот простой синтаксис, программист изолирован от более громоздкого синтаксиса функций pvm_send, pvm_pk, pvm_upkи pvm_recv. При этом он работает с более знакомыми для него объектно-ориентированными потоками данных. В данном случае поток данных представляет буфер сообщений, а элементы, которые помещаются в него или извлекаются оттуда, представляют сообщения, которыми обмениваются между собой PVM-процессы. Вспомните, что каждый PVM-процесс имеет отдельное адресное пространство. Поэтому операторы "<<" и ">>" не только маскируют вызовы функций pvm_send и pvm_recv, они также маскируют заложенную в них организацию связи. Поскольку класс pvm_stream можно использовать в много-поточной среде, операторы вставки и извлечения данных должны обеспечивать безопасность потоков выполнения.

Класс pvm_stream (см. рис. 11.4) содержит класс mutex. Класс mutex можно использовать для защиты критических разделов, которые имеются в классе pvm_stream. Класс pvm_stream инкапсулирует доступ к буферу отправки и буферу приема данных. Взаимодействие потоков выполнения и класса pvm_stream с буферами pvm_send и pvm_receive показано на рис. 11.5.

Рис.11.5. Взаимодействие потоков выполнения и класса pvm_stream с буферами pvm_send и pvm_receive

Критическими разделами являются не только буферы отправки и приема данных. Класс mios,используемый для хранения состояния класса pvm_stream,также является критическим разделом. Для защиты этого компонента можно использовать класс mutex.

При обращении к операторам вставки и извлечения данных можно использовать объект Mutex.

// Листинг 11.15.

//Определение операторов «<<���» и «>>» для класса pvm_stream

pvm_stream &pvm_stream::operator<<(int Data) {

//.. .

Mutex.lock(); reset();

pvm_pkint(&Data,1,1); pvm_send(TaskId,MessageId); Mutex.unlock(); //.. .

return(*this);

}

pvm_stream &pvm_stream::operator>>(int &Data) {

int BufId; //. . .

Mutex.lock();

BufId = pvm_recv(TaskId,MessageId);

StreamState = pvm_upkint(&Data,1,1);

Mutex.unlock();

//. . .

return(*this);

}

Этот вид защиты позволяет сделать класс pvm_streamбезопасным. Здесь мы не представили код обработки исключений или другой код, который бы позволил предотвратить бесконечные отсрочки или взаимную блокировку. Основнал идея в данном случае — сделать акцент на компонентах и вариантах архитектуры, которые пригодны для поддержки параллелизма. Интерфейсный класс mutexи класс pvm_streamможно использовать многократно, и оба они поддерживают параллельное программирование. Предполагается, что объекты класса pvm_streamдолжны использоваться PVM-задачами при отправке и приеме сообщений. Но это не является жестким требованием. Для того чтобы пользователь мог применить концепцию класса pvm_streamк своим классам, для них необходимо определить операторы вставки (<<) и извлечения (>>).

Пользовательские классы, создаваемые для обработки PVM-потоков данных

Чтобы понять, как определенный пользователем класс можно использовать совместно с классом pvm_stream,попробуем усовершенствовать возможности PVM-палитры, представленной в главе 6. Класс палитры представляет простую коллекцию цветов. Для удобства будем сохранять цвета в векторе строк (vector)с именем Colors.

Начне м с объявления класса spectral_palette,который содержит friend-объявления дл я операторов вставки (<<) и извлечени я (>>).

// Листинг 11.16. Объявление класса spectral_palette

class spectral_palette : public pvm_object{

protected:

//. . .

vector Colors;

public:

spectral_palette(void);

//...

friend pvm_stream &operator>>(pvm_stream &In,spectral_palette &Obj);

friend pvm_stream &operator<<(pvm_stream &Out,spectral_palette &Obj);

//. . .

Обратите внимание на то, что класс spectral_paletteв листинге 11.16 наследует класс pvm_object.Класс pvm_objectтем самым обеспечивает своего наследника доступом к идентификатору задачи и идентификатору сообщения. Вспомните, что идентификаторы задачи и сообщения используются во многих PVM-функциях. С помощью определения операторов вставки (<<) и извлечения (>>) объекты класса spectral_paletteможно пересылать между параллельно выполняемыми PVM-задачами. Метод, используемый для класса spectral_palette,очень прост, и его можно так же успешно применить к любому пользовательскому классу. Поскольку класс pvm_streamдолжен иметь эти операторы для встроенных типов данных и контейнеров, которые содержат значения встроенных типов данных, в пользовательском классе необходимо определить только операторы "<<" и ">>" для перевода их представления в любой встроенный тип данных или стандартный контейнер. Вот как, например, определяется оператор "<<" для класса spectral_paletteв листинге 11.17.

// Листинг 11.17. Определение оператора для

// класса spectral_palette

pvm_stream &operator<<(pvm_stream &Out, spectral_palette &Obj)

{

int N;

string Source;

for(N = 0;N < Obj.Colors.size();N++) {

Source.append(Obj.Colors[N]);

if( N

Source.append(" ");

}

}

Out.reset();

Out.taskId(Obj.TaskId);

Out.messageId(Obj.MessageId);

Out << Source;

return(Out);

}

Рассмотрим подробнее определение этой операции вставки в листинге 11.17. Поскольку класс pvm_streamработает только со встроенными типами данных, цель пользовательского оператора "<<" — перевести пользовательский объект в последовательность значений встроенных типов данных. Этот перевод является одной из основных обязанностей классов, «отвечающих» за потоковое представление данных. В данном случае объект класса spectral_paletteдолжен быть переведен в строку «цветов», разделенных пробелами. Список цветовых значений сохраняется в строке Source.Рассматриваемый процесс перевода позволяет применить к объекту этого класса оператор "<<", который был определен для строкового типа данных. Имея определения этих операторов, API-интерфейс программиста становится более удобным, чем при использовании ори г инальных версий функций библиотеки Pthread, POSIX и MPI. Ведь теперь объект класса spectral_paletteможно переслать из одной PVM-задачи в другую, используя такую привычную операцию вставки (<<).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Камерон Хьюз читать все книги автора по порядку

Камерон Хьюз - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Параллельное и распределенное программирование на С++ отзывы


Отзывы читателей о книге Параллельное и распределенное программирование на С++, автор: Камерон Хьюз. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x