Средства синхронизации параллельных процессов в языке MC#
Цель - изучить правила определения и использования связок (chords) в языке MC#; рассмотреть возможные типы связок и их влияние на поведение программы.
Главным и единственным средством синхронизации параллельных потоков (процессов) в языке MC# являются связки (chords). Они, в общем случае, состоят из обработчика и нескольких каналов (хотя возможно объявление связок, состоящих только из каналов, в частности, одного канала).
Типичный пример связки представлен ниже:
Общее правило срабатывания связки состоит в следующем: тело связки исполняется только после того, как вызваны все методы (обработчик и каналы) из заголовка этой связки.
Следует отметить, что, принципиально, срабатывание связки, объединяющей обработчик и несколько каналов, возможно в силу того, что они вызываются, в типичном случае, из разных потоков.
Задача 1. Написать программу на языке MC#, в которой порождаются три async-метода, и которым для посылки сигнала об окончании их работы передается специально определенный для этого канал.
Предусмотреть в основной программе связку, состоящую из обработчика и трех каналов для этих async-методов.
Модифицировать данную программу так, чтобы в ней использовался только один канал для посылки сигнала об окончании работы, а обработчик вызывался столько раз, сколько было запущено async-методов.
Задача 2. Написать программу на языке MC#, в которой имеется канал, разделяемый между двумя обработчиками, вида:
Реализовать в программе циклическую (многократную) посылку сообщений в каналы в последовательности
C1 ; C3; C2,
а также соответствующий циклический вызов обработчиков h1 и h2 из различных async-методов.
Объяснить полученные результаты.