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

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

Задача "Разработчики, тестеры и программисты"

Блокировка является одним из важнейших механизмов параллельных вычислений, когда приходится работать с общими ресурсами. Существуют различные инструменты, позволяющие осуществлять нужный стиль блокировки в зависимости от возникающей ситуации. Инструмент, заданный классом ReaderWriterLockSlim позволяет реализовать мягкий метод блокировки, применимый в задачах, соответствующих известному образцу (паттерну) "Читатели и писатели".

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

Содержательные классы, позволяющие построить модель решения задачи, помещены в проект ClassLibraryReadersWriters. Интерфейс реализован одной из форм проекта WindowsFormsTasksAndInstruments. В сравнении с проектом решения этой задачи, описанном в главе 5, изменению подвергся не только интерфейс, но и внесены некоторые поправки, улучшающие, по моему мнению, содержательную часть проекта. Вот как теперь выглядит интерфейс для пользователя, работающего с проектом:

Мягкие методы блокировки. Модель "Читатели и писатели"

Рис. 9.14. Мягкие методы блокировки. Модель "Читатели и писатели"

Задача "Обедающие философы"

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

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

 Обедающие философы

Рис. 9.15. Обедающие философы

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

Решение TaskAndInstruments. Выводы

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

Алексей Рыжков
Алексей Рыжков

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

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

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

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