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

Тут можно читать онлайн Камерон Хьюз - Параллельное и распределенное программирование на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: 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
В книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Здесь описаны простые методы программирования параллельных виртуальных машин и основы разработки кластерных приложений. Эта книга не только научит писать программные компоненты, предназначенные для совместной работы в сетевой среде, но и послужит надежным «путеводителем» по стандартам для программистов, которые занимаются многозадачными и многопоточными приложениями. Многолетний опыт работы привел авторов книги к использованию агентно-ориентированной архитектуры, а для минимизации затрат на обеспечение связей между объектами системы они предлагают применить методологию «классной доски».
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.

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

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

Интервал:

Закладка:

Сделать

Результаты не определены, если функция pthread_mutexattr_init () вызывается, ссылаясь на уже инициализированный объект атрибутов attr.

После того как объект атрибутов мьютекса был использован для инициализации одного или нескольких мьютексов, Любая функция, которая оказывает влияние на объект атрибутов (включал деструктор), никак не отразится на ранее инициализированных мьютексах.

Возвращаемые значения

При успешно м завершении функции pthread_mutexattr_destroy() и pthread_mutexattr_init () возвра щ ают нулевое значение; в противно м случае — код ошибки, обозначаю щ ий ее характер.

Ошибки

Функция pthread_mutexattr_destroy () м ожет завершиться неудачно, если:

[EINVAL ] значение, заданное параметром attr, недействительно.

Функция pthread_mutexattr_init () завершится неудачно, если:

[ENOMEM] для инициализации объекта атрибутов м ьютекса недостаточно существующей памяти.

Эти функции не возвра щ ают код ошибки [EINTR].

pthread_mutexattr_destroy, pthread_mutexattr_init — функции разрушения и инициализации объекта атрибутов м ьютекса.

Примеры

Отсутствуют.

Замечания по использованию

Отсутствуют.

Логическое обоснование

Для получения общих разъяснений назначения атрибутов см. описание функции pthread_attr_init (). Объекты атрибутов позволяют реализациям экспериментировать с полезными расширениями и разрешают использовать расширение этого тома стандарта IEEE Std 1003.1-2001, не изменяя существующих функций. Таким образом, они обеспечивают возможности для будущего расширения этого тома стандарта IEEE Std 1003.1-2001 и уменьшают соблазн преждевременно стандартизировать семантику, которая еще широко не реализована или не до конца понята.

Рассматривалась возможность использования таких дополнительных атрибутов мьютексов, как spin__only, limited spin, no__spin, recursive и metered. (Считаем необходимым разъяснить назначение таких атрибутов, как recursive nmetered: рекурсивные мьютексы позволяют выполнение нескольких повторных блокировок со стороны текущего владельца; мьютексы с регистрирацией фиксируют длину очереди, время ожидания и т.д.) Поскольку еще нет достаточных данных о том, насколько полезны эти атрибуты, в данном томе стандарта IEEE Std 1003.1-2001 они не определены. Однако объекты атрибутов мьютексов позволяют проверить эти идеи на предмет возможной их стандартизации в будущем.

Атрибуты мьютекса и производительность

Необходимо позаботиться о том, чтобы действующие по умолчанию значения атрибутов мьютекса были определены таким образом, чтобы мьютексы, инициализированные этими значениями, имели достаточно простую семантику, согласно которой блокирование и разблокирование можно было бы выполнить с помощью инструкций, эквивалентных операциям тестирования и установки значений (и, возможно, еще некоторых других базовых инструкций).

Существует по крайней мере один метод реализации, который можно использовать для сокращения расходов в период блокирования на проверку того, имеет ли мьютекс нестандартные атрибуты. Один такой метод заключается в том, чтобы предварительно заблокировать любые мьютексы, которые инициализированы нестандартными атрибутами. Любая попытка позже заблокировать такой мьютекс заставит реализацию перейти на «медленный путь», как если бы мьютекс был недоступен; затем реализация могла бы «по-настоящему» заблокировать «нестандартный» мьютекс. Базовая операция разблокировки более сложна, поскольку реализация никогда в действительности не желает освобождать мьютекс, который был предварительно заблокирован. Это показывает, что (в зависимости от оборудования) существует необходимость применения оптимизаций для более эффективной обработки часто используемых атрибутов мьютекса.

Использование общей памяти и синхронизация процессов

Существование функций распределения памяти в этом томе стандарта IEEE Std 1003.1-2001 дает приложению возможность выделять память объектам синхронизации из того раздела, который доступен многим процессам (а следовательно, и потокам многих процессов).

Чтобы реализовать такую возможность при эффективной поддержке обычного (т.е. однопроцессорного) случая, был определен атрибут process-shared.

Если реализация по д держивает опцию _POSIX_THREAD_PROCESS_SHARED,то атрибут process-shared м ожно использовать для индикации того, что к мьютексам или условным переменным могут получать доступ потоки сразу нескольких процессов.

Для того чтобы объекты синхронизации по у м олчанию создавались в са м ой эффективной фор м е, для атрибута process-shared в качестве стандартного было выбрано значение PTHREAD_PROCESS_PRIVATE.Пере м енные синхронизации, которые инициализированы значение м PTHREAD_PROCESS_PRIVATEатрибута process-shared, м огут обрабатываться потока м и только в то м процессе, в которо м была выполнена инициализации этих пере м енных. Пере м енные синхронизации, которые инициализированы значение м PTHREAD_PROCESS_SHAREDатрибута process-shared, м огут обрабатываться любым потоком в любом процессе, который имеет к ним доступ. В частности, эти процессы могут существовать независимо от процесса инициализации. Например, следующий код реализует простой семафор-счетчик в общедоступном файле, который может быть использован многими процессами.

/* sem.h */

struct semaphore {

pthread_mutex_t lock;

pthread_cond_t nonzero;

unsigned count;

};

typedef struct semaphore semaphore_t;

semaphore_t *semaphore_create (char *semaphore_name);

semaphore_t *semaphore_open (char *semaphore_name);

void semaphore_post (semaphore_t *semap);

void semaphore_wait (semaphore_t *semap); void semaphore_close (semaphore_t *semap);

/* sem.c */

#include #include #include #include #include #include 11 sem .h»

semaphore_t *

semaphore_create (char * semaphore_name) t

int fd;

semaphore_t * semap; pthread_mutexattr_t psharedm;

pthread_condattr_t psharedc;

fd = open(semaphore_name, O_RDWR | O_CREAT | O_EXCL, Оббб); if (fd <0)

return (NULL); (void) ftruncate (fd, sizeof (semaphore_t)); (void) pthread_mutexattr_init (&psharedm); (void) pthread_mutexattr_setpshared(&psharedm,

PTHREAD_PROCESS_SHARED) ;

(void) pthread_condattr_init (&psharedc); (void) pthread_condattr_setpshared (&psharedc

PTHREAD_PROCESS_SHARED);

semap = (semaphore_t *) mmap (NULL, sizeof (semaphore_t),

PR0T_READ | PROT_WRITE, MAP_SHARED, fd, О);

close (fd);

(void) pthread_mutex_init (&semap->lock, &psharedm);

(void) pthread_cond_init (&semap->nonzero, &psharedc); semap->count = 0; return (semap);

}

semaphore_t *

semaphore_open (char *semaphore_name) {

int fd;

semaphore_t *semap;

fd = open (semaphore_name, O_RDWR, 0666); if (fd <0)

return (NULL);

semap = (semaphore_t *) mmap (NULL, sizeof (semaphore_t),

PROT_READ | PROT_WRITE, MAP_SHARED, f d, 0) ;

close (fd); return (semap);

}

void

semaphore_post (semaphore_t *semap) {

pthread_mutex_lock (&semap->lock); if (semap->count == 0)

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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