Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Многопоточное параллельное программирование.pdf
Скачиваний:
120
Добавлен:
28.06.2014
Размер:
206.51 Кб
Скачать

За исключением параллелизма на уровне инструкций, единственным способом достижения параллелизма с помощью C++ является разбиение программы на потоки или процессы. Именно эти средства и предоставляет новый стандарт. Разработчик может использовать:

библиотеку POSIX Threads (или Pthreads);

POSIX-функцию spawn ();

семейство функций exec ().

Сторонние фирмы-изготовители придерживаются стандарта POSIX в реализациях, которые именуются библиотеками потоков Pthread или POSIX. Библиотека Pthread содержит более 60 функций, которые можно разделить на следующие категории.

1. Функции управления потоками.

o Конфигурирование потоков. o Отмена потоков.

o Стратегии планирования потоков. o Доступ к данным потоков.

o Обработка сигналов.

o Функции доступа к атрибутам потоков. o Конфигурирование атрибутов потоков.

o Конфигурирование атрибутов, относящихся к стекам потоков.

oКонфигурирование атрибутов, относящихся к стратегиям планирования потоков.

2.Функции управления мьютексами.

oКонфигурирование мьютексов.

o Управление приоритетами.

o Функции доступа к атрибутам мьютексов. o Конфигурирование атрибутов мьютексов.

o Конфигурирование атрибутов, относящихся к протоколам мьютексов.

oКонфигурирование атрибутов, относящихся к управлению приоритетами мьютексов.

3.Функции управления условными переменными.

oКонфигурирование условных переменных.

o Функции доступа к атрибутам условных переменных. o Конфигурирование атрибутов условных переменных.

o Функции совместного использования условных переменных.

Библиотека Pthread может быть реализована на любом языке, но для соответствия стандарту POSIX она должна быть согласована со стандартизированным интерфейсом. Библиотека Pthread - не единственная реализация потокового API-интерфейса. Существуют другие реализации, созданные сторонними фирмами производителями аппаратных и программных средств. Например, среда Sun поддерживает библиотеку Pthread и собственный вариант библиотеки потоков Solaris.

1.3 Изменение парадигмы – проблемы координации

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

В параллельных программах сразу несколько инструкций могут выполняться в один и тот же момент времени. Программа разбивается на множество параллельных задач. Программа может состоять из сотен или даже тысяч выполняющихся одновременно подпрограмм. В параллельном программирования последовательность и местоположение составляющих ПО не всегда предсказуемы. Несколько задач могут одновременно начать выполнение на любом процессоре, без какой бы то ни было гарантии того, что задачи закреплены за определенными процессорами, или такая-то задача завершится первой, или все они завершатся в определённом порядке.

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

Декомпозиция работ определяет, что должны делать разные части ПО. Когда множество компонентов ПО работают в рамках одной задачи, их функционирование необходимо координировать. При этом возникает множество проблем. Каким двум (или больше) потокам необходим доступ к одному и тому же ресурсу? Кто имеет право получить его первым? Если некоторые части ПО завершат свою работу гораздо раньше других, то нужно ли им "поручать" новую работу? ДСС (декомпозиция, связь и синхронизация) — это тот минимум вопросов, которые необходимо решить, приступая к параллельному программированию.

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

Проблема №1: "гонка" данных

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

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

Проблема №2: бесконечная отсрочка

Соседние файлы в предмете Параллельные вычислительные системы