Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Абстрактные критические секции

СРЕДСТВА ВЗАИМОДЕЙСТВИЯ ПРОГРАММНЫХ ЕДИНИЦ

Упражнения

1. Разработать программу для Windows с тремя нитями, дополнительными к главной и создаваемыми системными функциями CreateThread. Каждая из нитей должна использовать общие для всех нитей данные, заданные 23 первыми буквами латинского алфавита. Каждая из этих нитей на своем k-м шаге выводит со своей случайной задержкой на место "своего" столбца экрана k-ю букву из указанного массива латинских букв, причем с числом повторений, равным условному номеру нити. На 6-м шаге главной нити она приостанавливает первую из дополнительных нитей, а на 13-м шаге задает возобновление выполнения этой нити. Вторая дополнительная нить на 11-м своем шаге отдает приказ на уничтожение третьей дополнительной нити. Все управляющие указания должны отображаться сообщениями без прокрутки экрана (в фиксированные позиции экрана).

 

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

Как известно, установка звена в начало очереди состоит из двух совершенно необходимых операций:

1) значение указателя top (на начало очереди) записывается в поле связи во вставляемом звене;

2) адрес вставляемого звена записывается в указатель начала очереди top.

Пусть в участок программы с этими действиями входят два процесса, причем процесс A успевает выполнить шаг 1, а затем диспетчер ОС отбирает у него процессор, и далее выполняется процесс B. После того как процесс B вставит свое звено в очередь, рано или поздно диспетчер даст возможность продолжить выполнение процессу A. Он, продолжая начатые ранее действия, выполнит шаг 2 установки в очередь своего звена. В результате в поле связи обоих вставленных звеньев будет одно и то же значение, бывшее до начала их вставки в служебной переменной top, т.е. оба вставленных звена показывают полем связи на звено, вставленное до них последним, а указатель начала очереди top показывает только на звено, вставленное процессом A. Таким образом, звено процесса B как бы "потерялось", к нему нет доступа, начиная со значения указателя top. (Читателю рекомендуется для четкого представления происходящего выполнить рисунки очереди запросов и описанных операций по вставке звеньев в изложенной последовательности действий.)

Введем некоторые термины, сложившиеся в теории параллельных процессов. Зависимость результатов процесса от непредусмотренного в программе взаимодействия с другими процессами называют состязанием процессов. Теоретическим средством устранить состязание между процессами является решение запретить прерывания, на основе которых организована параллельность процессов. Но такое решение запрещает (хотя бы на время) параллельное выполнение процессов, к тому же годится только для однопроцессорных систем.

Более общим понятием, чем общие данные является, понятие ресурса, которое кроме общих данных может быть и общедоступной аппаратурой.Участок программы, в котором нить производит обращение к общему (разделяемому с другими нитями) ресурсу, называется критическим интервалом нити.

Для устранения состязаний процессов (или нитей) используют монополизацию ресурса. Монополизация ресурса – это временное предоставление его в исключительное использование одной нити. Как пояснялось в гл. 4 и 5, в современных ОС ресурсы являются собственностью процесса, а для нитей одного процесса – общими. Критический интервал нити поэтому ограничивают с начала и конца специальными управляющими конструкциями операционной системы, в абстрактном изложении называемыми прологом и эпилогом критического интервала. Назначение этих конструкций – обеспечить нахождение в критическом интервале только одной нити.

 

<== предыдущая лекция | следующая лекция ==>
Ожидание завершения нити | Абстрактные семафоры
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 434; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.