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

Средства синхронизации параллельных процессов в языке MC#

Ключевые слова: общее правило

Цель - изучить правила определения и использования связок (chords) в языке MC#; рассмотреть возможные типы связок и их влияние на поведение программы.

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

Типичный пример связки представлен ниже:


Общее правило срабатывания связки состоит в следующем: тело связки исполняется только после того, как вызваны все методы (обработчик и каналы) из заголовка этой связки.

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

Задача 1. Написать программу на языке MC#, в которой порождаются три async-метода, и которым для посылки сигнала об окончании их работы передается специально определенный для этого канал.

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

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

Задача 2. Написать программу на языке MC#, в которой имеется канал, разделяемый между двумя обработчиками, вида:


Реализовать в программе циклическую (многократную) посылку сообщений в каналы в последовательности

C1 ; C3; C2,

а также соответствующий циклический вызов обработчиков h1 и h2 из различных async-методов.

Объяснить полученные результаты.

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