Опубликован: 22.04.2008 | Уровень: профессионал | Доступ: платный
Дополнительный материал 14:

Использование каналов и обработчиков языка MC# для организации взаимодействия параллельных потоков (процессов)

Ключевые слова: net, ПО, программа, отображение

Цель - изучить синтаксические конструкции каналов и обработчиков языка MC# и правила их определения; рассмотреть правила работы Runtime-системы языка с ними.

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

В рамках многопоточного программирования, эти средства являются более высокоуровневыми и удобными в использовании, чем стандартные средства языка C# и платформы .NET, которые можно использовать для организации межпоточного взаимодействия.

Каналы и обработчики обычно объявляются в MC#-программах с помощью специальных конструкций - связок (chords). Синтаксические правила определения связок в языке MC# имеют вид:


Связки определяются в виде членов класса. По правилам корректного определения, каналы и обработчики не могут иметь модификатор static, а потому они всегда привязаны к некоторому объекту класса, в рамках которого они объявлены.

Одна из ключевых особенностей языка MC# состоит в том, что каналы и обработчики могут передаваться в качестве аргументов методам отдельно от объектов, которым они принадлежат.

Задача 1. Модифицировать параллельную программу перемножения матриц на основе асинхронных методов из Занятия 12 таким образом, чтобы основная программа передавала асинхронным методам в качестве аргумента канал для посылки сообщений об окончании работы этих методов.

Задача 2. Написать параллельную программу, в которой два асинхронных метода поочередно печатают сообщения на выходной консоли.

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

Дмитрий Молокоедов
Дмитрий Молокоедов
Россия, Новосибирск, НГПУ, 2009
Паулус Шеетекела
Паулус Шеетекела
Россия, ТГТУ, 2010