Н., Пескова Е. Е., Шаманаев П. А. Основы параллельного программирования с использованием технологий mpi и openmp учебное пособие саранск издательство свмо 2013 2



Pdf көрінісі
бет48/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   45   46   47   48   49   50   51   52   53
ParProg MPI OpenMP

3.5.2 Критические секции 
Этот тип синхронизации используется для описания структурных 
блоков, выполняющихся только в одном потоке из всего набора 
параллельных потоков. 
#pragma omp critical имя[()] структурированный блок 
 
В каждый момент времени в критической секции может находиться 
не более одной нити. Если критическая секция уже выполняется какой-
либо нитью, то все другие нити, выполнившие директиву для секции с 
данным именем, будут заблокированы, пока вошедшая нить не закончит 
выполнение данной критической секции. Как только работавшая нить 
выйдет из критической секции, одна из заблокированных на входе нитей 
войдет в неё. Если на входе в критическую секцию стояло несколько 


70 
нитей, то случайным образом выбирается одна из них, а остальные 
заблокированные нити продолжают ожидание. 
Все неименованные критические секции условно ассоциируются с 
одним и тем же именем. Все критические секции, имеющие одно и тоже 
имя, рассматриваются единой секцией, даже если находятся в разных 
параллельных областях. Побочные входы и выходы из критической 
секции запрещены [11,14]. 
Пример 3.16. 
#include 
#include 
int main()
{
int x; 
x=0; 
#pragma omp parallel shared(x) 

#pragma omp critcal 
 
{x=x+1; 
 
printf(“x=%d\n”,x); 
 
}} 
return 0;} 
В примере переменная x объявлена вне параллельной области, она 
является общей. В результате выполнения директивы critical каждая нить 
по очереди увеличит x на 1 и выведет результат на экран. 
Если есть критическая секция, то в каждый момент времени 
фрагмент будет обрабатываться лишь какой-либо одной нитью. 
Остальные нити, даже если они уже подошли к данной точке программы и 
готовы к работе, будут ожидать своей очереди. Если критической секции 
нет, то все нити могут одновременно выполнить данный участок кода. С 
одной стороны, критические секции предоставляют удобный механизм 
для работы с общими переменными. Но с другой стороны, пользоваться 
им нужно осмотрительно, поскольку критические секции добавляют 
последовательные участки кода в параллельную программу, что может 
снизить её эффективность. 


Достарыңызбен бөлісу:
1   ...   45   46   47   48   49   50   51   52   53




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет