Конспект установочных лекций по комплексному курсу Информатика, Теория информации


Языковые средства для параллельных ходов работы


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

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

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

Пример (образование параллельных процессов). Пусть р - описание программы (или обозначение для такого описания), а х - идентификатор некоторого процесса (новый экземпляр выполнения программы). Оператор start р name х порождает процесс, соответствующий заданному описанию р. Процесс использует индивидуальное имя х, данное булевское выражению terminate х значения true называет на то, что процесс, обозначенный через х, уже закончен. Пока процесс протекает, булевское выражение дает значение false. С помощью terminate х процесс, обозначенный через х (и все индуцированные им процессы), заканчивается. Чтобы ввести обозначения (переменные) для самостоятельно выполняющихся программных единиц, используется объявление process х.

Тем самым объявляется переменная х, при содействии которой позднее может быть указана ссылка на ход выполнения программы с помощью start... name х.

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




Начало  Назад  Вперед