Читайте также:
|
|
Существует ряд функций, позволяющих работать с глобальными переменными из всех нитей, не заботясь о синхронизации, т.к. эти функции сами за ней следят – их выполнение атомарно. Это функции InterlockedIncrement, InterlockedDecrement, InterlockedExchange, InterlockedExchangeAdd и InterlockedCompareExchange. Например, функция InterlockedIncrement атомарно увеличивает значение 32-битной переменной на единицу, что удобно использовать для различных счетчиков.
Для получения полной информации о назначении, использовании и синтаксисе всех функций WIN32 API необходимо воспользоваться системой помощи MS SDK, входящей в состав сред программирования Borland Delphi или CBuilder, а также MSDN, поставляемым в составе системы программирования Visual C.
Постановка задачи: разработать консольное приложение в среде программирования Visual C, которое обязательно использует нити и решает поставленную задачу в соответствии с указанным в индивидуальном задании механизме синхронизации.
Порядок выполнения работы
1. Ознакомиться с постановкой задачи и исходными данными. В соответствии с номером по журналу определить вариант задачи.
2. Согласно рекомендациям, приведенным в исходных данных, сконструировать структуру программы.
3. Составить тексты программ и утвердить их у преподавателя.
4. Пункты 1 - 3 должны быть выполнены предварительно до проведения данной лабораторной работы. Утверждение преподавателем текстов программ является допуском к лабораторной работе.
5. Набрать текст программы.
6. Выполнить компиляцию программы.
7. Провести анализ и исправление обнаруженных синтаксических ошибок в тексте программы и повторить пункты 6. и 7. При устранении всех синтаксических ошибок перейти к выполнению пункта 8.
8. Получить решение и, в случае обнаружения логических ошибок, описать и устранить их. Продемонстрировать преподавателю окончательный вариант программы и ее работу.
Содержание отчета
1. Тема лабораторной работы.
2. Цель работы.
3. Индивидуальное задание.
4. Метод и алгоритм решения задачи.
5. Текст программы.
6. Результаты работы программы.
7. Выводы по работе.
Задачи
I. Задача «производители-потребители». Решается проблема работы с нескольких процессов (нитей) с одним буфером. Часть процессов являются «производителями»: в случайные моменты времени производят запись информации в буфер. Часть процессов являются «потребителями»: в случайные моменты читают информацию из буфера (после чтения информация в буфере теряется). Необходимо организовать такую работу, чтобы не было коллизий при совместной работе «производителей» и «потребителей».
II. Задача «читатели-писатели». Имеются данные, совместно используемые нескольким процессами (нитями). Имеется несколько процессов (нитей), которые только читают эти данные («читатели») и несколько других, которые только записывают данные (или изменяют их) («писатели»). При этом должны удовлетворяться следующие условия:
– любое число «читателей» могут одновременно читать данные;
– записывать данные в определенный момент может только один «писатель».
– когда «писатель» записывает данные, ни один читатель не может его читать.
III. Задача об «обедающих философах». Имеется некоторое количество процессов (нитей) – «философов», которые «сидят вокруг стола с едой» - выполняются в операционной системе. На столе находится «столовые приборы» (тарелки и вилки) – «ресурсы», количество которых равно количеству «философов». Каждый философ некоторое время размышляет, затем пытается взять 2 рядом лежащие (слева и справа от него) вилки. Если это удается, то он принимается за еду. Время приема пищи – произвольно. Решение должно избегать возможности наступления тупика (круговое ожидание) и голодания.
IV. Задача о «парикмахере». В «парикмахерской» (операционная система) есть 1 «парикмахер» (процесс или нить), его кресло и N стульев для посетителей. Если желающих воспользоваться его услугами нет, то он «спит». Если в парикмахерскую приходит клиент, он должен разбудить парикмахера. Если клиент видит, что парикмахер занят, он либо садится на стул и ждет (если есть место), либо уходит (если места нет). Необходимо запрограммировать «парикмахера» и «клиентов» так, чтобы избежать состояния состязания.
Дата добавления: 2014-12-18; просмотров: 31 | Поможем написать вашу работу | Нарушение авторских прав |