не хватает одного параметра: static void Main(string[] args) |
Программные проекты на C#
Гонка данных и клинч. Описание Решения TasksAndInstruments
В предыдущих проектах основной целью являлось поиск параллельных алгоритмов, которые по времени были бы эффективнее последовательного алгоритма. Параллельные алгоритмы предусматривали распараллеливание по данным, когда один и тот же метод параллельно применяется к различным непересекающимся подмножествам исходной совокупности данных.
Проекты в решении TasksAndInstruments другого типа. Здесь изначально предполагается, что задача решается с использованием параллельных вычислений, так что о сравнении с последовательным алгоритмом речь не идет. По нашей классификации такие задачи относятся к третьему типу – к классу задач, ориентированных на параллельные вычисления.
Для таких задач при параллельных вычислениях могут использоваться общие ресурсы, прежде всего, общие данные, что может приводить к возникновению таких проблем как гонка данных и клинч. В проектах, входящих в решение TasksAndInstruments, рассматриваются именно такие задачи. Все эти задачи подробно рассмотрены в главе 5 учебного курса, а предлагаемые проекты являются улучшенной модификацией проектов, описанных в этой главе.
Решение TasksAndInstruments содержит 4 проекта – три из них представляют библиотеки классов, а четвертый является интерфейсным Windows Forms проектом с главной формой, позволяющей выбрать для исследования одну из четырех рассматриваемых задач. Вот как выглядит главная форма:
Задача Банковский счет
В проекте, реализующем эту задачу, моделируется ситуация, приводящая к гонке данных и ее последствиям. Содержательные классы для этой задачи включены в динамическую библиотеку классов – проект ClassLibraryTasksAndInstruments. Вот как выглядит результаты эксперимента, приводящего к гонке данных:
Простейшим инструментом, позволяющим справиться с гонкой данных, является оператор lock языка C#. Проект демонстрирует безопасную параллельную работу с банковским счетом с использованием этого инструмента. Результаты эксперимента выглядят в этом случае так:
Задача "Кольцо и серьги"
В проекте, реализующем эту задачу, моделируется ситуация, приводящая к клинчу, и показано, как можно справиться с этой проблемой. Поскольку клинч приводит к зависанию компьютера, то убедительным доказательством возникновения этой ситуации является запуск проекта на собственном компьютере.
Как и в предыдущей задаче, содержательные классы включены в проект ClassLibraryTasksAndInstruments, а интерфейс проекта реализован в одной из форм проекта WindowsFormsTasksAndInstruments . Покажем, как выглядят результаты эксперимента, позволяющего справиться с ситуацией клинча: