Россия, Новосибирск, НГПУ, 2009 |
Использование каналов и обработчиков языка MC# для организации взаимодействия параллельных потоков (процессов)
Цель - изучить синтаксические конструкции каналов и обработчиков языка MC# и правила их определения; рассмотреть правила работы Runtime-системы языка с ними.
Каналы и обработчики канальных сообщений являются средствами организации взаимодействия параллельных, распределенных процессов между собой.
В рамках многопоточного программирования, эти средства являются более высокоуровневыми и удобными в использовании, чем стандартные средства языка C# и платформы .NET, которые можно использовать для организации межпоточного взаимодействия.
Каналы и обработчики обычно объявляются в MC#-программах с помощью специальных конструкций - связок (chords). Синтаксические правила определения связок в языке MC# имеют вид:
Связки определяются в виде членов класса. По правилам корректного определения, каналы и обработчики не могут иметь модификатор static, а потому они всегда привязаны к некоторому объекту класса, в рамках которого они объявлены.
Одна из ключевых особенностей языка MC# состоит в том, что каналы и обработчики могут передаваться в качестве аргументов методам отдельно от объектов, которым они принадлежат.
Задача 1. Модифицировать параллельную программу перемножения матриц на основе асинхронных методов из Занятия 12 таким образом, чтобы основная программа передавала асинхронным методам в качестве аргумента канал для посылки сообщений об окончании работы этих методов.
Задача 2. Написать параллельную программу, в которой два асинхронных метода поочередно печатают сообщения на выходной консоли.
Предусмотреть для этого две связки, состоящие из одного обработчика и одного канала, где каналы назначаются (передаются в качестве аргументов) соответствующим async-методам. Каждый из async-методов должен посылать сообщения в свой собственный канал, а основная программа должна обеспечивать их отображение на консоли в правильном порядке путем поочередного вызова соответствующих обработчиков.