Cтраница 4
Передача управления от одной сопрограммы к другой. [46]
Кроме того, поскольку сопрограммы при разделении управления выступают как равные, то передача управления во время игры может быть представлена более прямо. Каждая сопрограмма-игрок всегда передает управление своему левому соседу, за исключением случаев конца розыгрыша взятки или конца торговли, когда управление передается сопрограмме-хозяину. Сопрограмма-хозяин получает управление, только если она действительно должна что-то сделать, и от нее требуется лишь передать управление соответствующему игроку, опреде-лив, какой игрок должен играть следующим. [47]
В, приведенном примере сопрограммы выполняются последовательно. Возможны и более сложные стратегии. [48]
При передаче управления статус вызывающей сопрограммы запоминается в переменной типа PROCESS, а из другой переменной того же типа восстанавливается статус вызываемой сопрограммы. Таким образом, переменные типа PROCESS играют ключевую роль при работе с сопрограммами. [49]
Перед тем как использовать сопрограмму, ее следует создать. Операция создания сопрограммы инициализирует ее дескриптор и делает возможным обращение к ней. Процедура NEWPROCESS, служащая для создания сопрограмм, требует нескольких параметров. [50]
Существует важное родство между сопрограммами и многопроходными алгоритмами. [51]
Хотя это родство между сопрограммами и проходами важно, мы должны иметь в виду, что не во всех случаях, когда применяются сопрограммы, возможно расщепление на многопроходные алгоритмы. Например, если сопрограмма В получает входную информацию из А и передает в А информацию, определяющую дальнейшие действия, то преобразование А в проход, за которым следует проход В, становится невозможным. [52]
Размер рабочего пространства зависит от сопрограммы. Простые сопрограммы требуют всего несколько десятков слов. Сложные могут требовать тысячи слов. Будьте внимательны с теме из них, которые используют рекурсивный вызов процедур, содержат в качестве локальных переменных массивы, а также вызывают процедуры из глобальных модулей. Объем требуемой памяти зависит от реализации. Для его определения необходимо ознакомиться с руководством по системе. [53]