Студопедия — Структурированный блок программы
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Структурированный блок программы






}

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

 

Частым случаем использования критических секций на практике является обновление общих переменных. Например, если переменная SUM является общей и оператор вида SUM=SUM+Expr находится в параллельной секции программы, то при одновременном выполнении данного оператора несколькими нитями можно получить некорректный результат. Чтобы избежать такой ситуации можно воспользоваться механизмом критических секций или специально предусмотренным для таких случаев оператором atomic.

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

#pragma omp parallel shared(x, y) private(x_next, y_next)

{

#pragma omp critical (xaxis)

x_next = dequeue(x);

work(x_next);

#pragma omp critical (yaxis)

y_next = dequeue(y);

work(y_next);

}

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

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

После того, как все нити по очереди прошли критическую секцию и обновили значение max, поиск максимального значения продолжается в параллельном режиме в каждой порции каждой нити.







Дата добавления: 2015-08-12; просмотров: 453. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

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

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

Патристика и схоластика как этап в средневековой философии Основной задачей теологии является толкование Священного писания, доказательство существования Бога и формулировка догматов Церкви...

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

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Studopedia.info - Студопедия - 2014-2024 год . (0.007 сек.) русская версия | украинская версия