Критическая область. Основные модификации

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

«Критическая область»

var V:shared <Type>;

region V do S;

Во вторых, эти механизмы реализованы парными примитивами (для семафор, закрыт и открыт) что подразумевает четкую последовательность их вызова.

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

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

Однако получаемые решения будут неэквивалентны с их практической точки зрения, т. е. С точки зрения проектирования и реализации.

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

Имеются средства синхронизации, обладают большей наглядностью и базируются на языковом обособлении и локализации средств взаимодействия.

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

Механизм «критической области»

При описании кеременной используется следующая нотация:

var V: shared<Type>;

region V do S;

Устанавливается, что обращение к переменной V допускается только в рамках специальной конструкции region.

Конструкция region определяет критическую область по отношению к переменной V соответственно при использовании // проц. Реализуется режим взаимного исключения по отношению к переменной V.

Преимущества:

1. Ошибки используемого ресурса выявляются на этапе компиляции программы.

2. Преобразование этой конструкции с использованием базовых механизмов синхонизации. Может быть выполнено компилятором безошибочно

«Услованя критическая область»

var V:shared<Type>;

region V do S;

В рамках конструкции region допускается использование оператора await таким образом вводится возможность рабьоты с критическим ресурсом, при условии что он находится в пределах сост. В качества параметра примитива используется логическое выражение.

Значение компонентов этого выражения могут меняться другими процессами, но обязательно в рамках конструкции region в отнош. Общего.

Если при выполнении операции await значение переменной становится истинным, данный процесс временно покидает критическую область. Это дает возможность другим процессам (одному) войти в критическую область и поменять компонент логического выражения.

При реализации строятся 2 очереди процесса работ. В критический ресурс. В первую (главную) попадаеют те процессы, которые готовы войти в критическую область и конкурируют за право использование критического ресурса. Во вторую (событийную) попадабт процессы, которые при выполнении операции await обнаружили невозможность обработки ресурса (временно покинули критическую область).

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

Описанный механизм может быть реализован компилятором с использованием двоичного семафора.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: