Синхронизация нитей внутри процесса в ОС Windows

Лабораторная работа № 2

Синхронизация нитей внутри процесса в ОС Windows.

 

Цель работы: изучить возможности применения механизмов синхронизации нитей одного процесса в операционной системе Windows.

 

Темы для предварительной проработки: процессы и нити в операционных системах, жизненный цикл процесса, средства взаимодействия процессов IPC, интерфейс прикладного программирования API WIN32.

 

Теоретические сведения

1. Процессы, нити и волокна в ОС Windows. Дополнительные данные. Процессом (process) называется экземпляр программы, загруженной в память. Этот… Так как практически всегда нитей гораздо больше, чем физических процессоров для их выполнения, то нити на самом деле…

Взаимоисключения

Две (или более) нити могут создать мьютекс с одним и тем же именем, вызвав функцию CreateMutex. Первая нить действительно создает мьютекс, а… Несколько нитей могут получить дескриптор одного и того же мьютекса, что… Для того чтобы объявить взаимоисключение принадлежащим текущей нити, надо вызвать одну из ожидающих функций. Нить,…

Защищенный доступ к переменным

  Для получения полной информации о назначении, использовании и синтаксисе всех…  

Порядок выполнения работы

1. Ознакомиться с постановкой задачи и исходными данными. В соответствии с номером по журналу определить вариант задачи. 2. Согласно рекомендациям, приведенным в исходных данных, сконструировать… 3. Составить тексты программ и утвердить их у преподавателя.

Содержание отчета

 

1. Тема лабораторной работы.

2. Цель работы.

3. Индивидуальное задание.

4. Метод и алгоритм решения задачи.

5. Текст программы.

6. Результаты работы программы.

7. Выводы по работе.

 

Задачи

 

I. Задача «производители-потребители». Решается проблема работы с нескольких процессов (нитей) с одним буфером. Часть процессов являются «производителями»: в случайные моменты времени производят запись информации в буфер. Часть процессов являются «потребителями»: в случайные моменты читают информацию из буфера (после чтения информация в буфере теряется). Необходимо организовать такую работу, чтобы не было коллизий при совместной работе «производителей» и «потребителей».

II. Задача «читатели-писатели». Имеются данные, совместно используемые нескольким процессами (нитями). Имеется несколько процессов (нитей), которые только читают эти данные («читатели») и несколько других, которые только записывают данные (или изменяют их) («писатели»). При этом должны удовлетворяться следующие условия:

– любое число «читателей» могут одновременно читать данные;

– записывать данные в определенный момент может только один «писатель».

– когда «писатель» записывает данные, ни один читатель не может его читать.

III. Задача об «обедающих философах». Имеется некоторое количество процессов (нитей) – «философов», которые «сидят вокруг стола с едой» - выполняются в операционной системе. На столе находится «столовые приборы» (тарелки и вилки) – «ресурсы», количество которых равно количеству «философов». Каждый философ некоторое время размышляет, затем пытается взять 2 рядом лежащие (слева и справа от него) вилки. Если это удается, то он принимается за еду. Время приема пищи – произвольно. Решение должно избегать возможности наступления тупика (круговое ожидание) и голодания.

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

 

Индивидуальные задания

1. Задача I. Механизм синхронизации – семафоры. Буфер – циклический.

2. Задача II. Механизм синхронизации – семафоры. Преимущество имеют «писатели».

3. Задача III. Механизм синхронизации – семафоры.

4. Задача I. Механизм синхронизации – события. Буфер – линейный.

5. Задача II. Механизм синхронизации – события. Преимущество имеют «писатели».

6. Задача III. Механизм синхронизации – события.

7. Задача I. Механизм синхронизации – защищенный доступ к переменным. Буфер – стек.

8. Задача II. Механизм синхронизации – мьютексы. Преимущество имеют «писатели».

9. Задача III. Механизм синхронизации – мьютексы.

10. Задача I. Механизм синхронизации – семафоры. Буфер – линейный.

11. Задача II. Механизм синхронизации – семафоры. Преимущество имеют «читатели».

12. Задача III. Механизм синхронизации – критические секции.

13. Задача I. Механизм синхронизации – семафоры. Буфер – стек.

14. Задача II. Механизм синхронизации – события. Преимущество имеют «читатели».

15. Задача I. Механизм синхронизации – события. Буфер – циклический.

16. Задача II. Механизм синхронизации – критические секции. Преимущество имеют «писатели».

17. Задача I. Механизм синхронизации – события. Буфер – стек.

18. Задача II. Механизм синхронизации – семафоры. Преимущество имеют «читатели».

19. Задача I. Механизм синхронизации – защищенный доступ к переменным. Буфер – линейный.

20. Задача II. Механизм синхронизации – критические секции. Преимущество имеют «читатели».

21. Задача I. Механизм синхронизации – защищенный доступ к переменным Буфер – циклический.

22. Задача II. Механизм синхронизации – мьютексы. Преимущество имеют «читатели».