Языки программирования - концепции и принципы

concurent program) состоит из одного


    Параллельная программа ( concurent program) состоит из одного или не­скольких программных компонентов (процессов), которые могут выпол­няться параллельно. Параллельные программы сталкиваются с двумя про­блемами:

 

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

 

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

12.2. Общая память

 

Самая простая модель параллельного программирования — это модель с общей памятью (см. рис. 12.1). Два или несколько процессов могут обращать­ся к одной и той же области памяти, хотя они также могут иметь свою собст­венную частную, или приватную, (private) память. Предположим, что у нас есть два процесса, которые пытаются изменить одну и ту же переменную в общей памяти:

procedure Main is

    N: Integer := 0;

    task T1;

    task T2;





task body T1 is

begin

      for I in 1 ..100 loop N := N+1; end loop;

end T1;

task body T2 is

begin

       for I in 1 ..100 loop N := N+1; end loop;

end T2;

begin

null;

end Main;

Рассмотрим теперь реализацию оператора присваивания:

load             R1,N           Загрузить из памяти

add              R1,#1          Увеличить содержимое регистра

store            R1,N           Сохранить в памяти

Если каждое выполнение тела цикла в Т1 завершается до того, как Т2 вы­полняет свое тело цикла, N будет увеличено 200 раз. Однако каждая задача может быть выполнена на отдельном компьютере со своим набором регист­ров.

Содержание раздела