Опубликован: 23.04.2013 | Доступ: свободный | Студентов: 854 / 184 | Длительность: 12:54:00
Лекция 10:

Программные проекты на C#

Гонка данных и клинч. Описание Решения TasksAndInstruments

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

Проекты в решении TasksAndInstruments другого типа. Здесь изначально предполагается, что задача решается с использованием параллельных вычислений, так что о сравнении с последовательным алгоритмом речь не идет. По нашей классификации такие задачи относятся к третьему типу – к классу задач, ориентированных на параллельные вычисления.

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

Решение TasksAndInstruments содержит 4 проекта – три из них представляют библиотеки классов, а четвертый является интерфейсным Windows Forms проектом с главной формой, позволяющей выбрать для исследования одну из четырех рассматриваемых задач. Вот как выглядит главная форма:

Главная форма проекта WindowsFormsTasksAndInstruments

Рис. 9.10. Главная форма проекта WindowsFormsTasksAndInstruments

Задача Банковский счет

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

Моделирование ситуации "гонки данных"

Рис. 9.11. Моделирование ситуации "гонки данных"

Простейшим инструментом, позволяющим справиться с гонкой данных, является оператор lock языка C#. Проект демонстрирует безопасную параллельную работу с банковским счетом с использованием этого инструмента. Результаты эксперимента выглядят в этом случае так:

Безопасная параллельная работа с банковским счетом

Рис. 9.12. Безопасная параллельная работа с банковским счетом

Задача "Кольцо и серьги"

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

Как и в предыдущей задаче, содержательные классы включены в проект ClassLibraryTasksAndInstruments, а интерфейс проекта реализован в одной из форм проекта WindowsFormsTasksAndInstruments . Покажем, как выглядят результаты эксперимента, позволяющего справиться с ситуацией клинча:

Решение проблемы "клинча"

Рис. 9.13. Решение проблемы "клинча"
Алексей Рыжков
Алексей Рыжков

не хватает одного параметра:

static void Main(string[] args)
        {
            x = new int[n];
            Print(Sample1,"original");
            Print(Sample1P, "paralel");
            Console.Read();
        }

Никита Белов
Никита Белов

Выставил оценки курса и заданий, начал писать замечания. После нажатия кнопки "Enter" окно отзыва пропало, открыть его снова не могу. Кнопка "Удалить комментарий" в разделе "Мнения" не работает. Как мне отредактировать недописанный отзыв?