Синхронизация потоков
Синхронизировать – это значит установить порядок или
правила последовательного исполнения или доступа потоков
к общим данным или критическим областям программы [1, с.17].
Мьютекс, от англ. Mutex, Mutual exclusion locks – взаимноисключающие
блокировки, это механизм синхронизации потоков, который позволяет
обеспечить исключительный доступа к разделяемым данным. Этот объект подобен
блокирующему замку в двери комнаты (критической секции): как только
поток захватит мьютекс, никакой другой поток не сможет получить доступ
к критической секции, до тех пор пока замок не откроется [1, с.17-18].
1. Создать программу в Scratch, моделирующую синхронизацию
потоков с помощью мьютексов.
Измените значения задержек
1) одинаковые в обоих потоках, равные 1 секунде,
2) первый поток - 0,3 секунды, второй - 1 секунда,
3) первый поток - 1 секунда, второй - 0,3 секунды.
Сделайте выводы, отметьте, как меняются во всех трех случаях
переменные поток1 и поток2, переменные поток11 и поток22.
Объясните, почему эти переменные так меняются.
2. Доработайте пример программы, добавив еще один список
и поток, который записывает данные в список.
Сначала без синхронизации, а затем - с синхронизацией.
Создайте переменные поток3 и поток33.
Домашнее задание
1. Оформить фрагмент конспекта урока в форме веб-страницы
сайте с помощью сервиса Google Сайты. Поместить на страницу
1) условия задач,
2) снимки экранов с программой,
3) ссылки на файл с программой
и текстовыми файлами с координатами на Google Диске.
2. Реализовать с помощью приведенного выше примера программы в Scratch
следующие варианты синхронизации потоков. Ниже для ясности приведена
аналогия с доставкой газет почтальоном.
Первый поток - почтальон, приносит газеты и складывает
в почтовый ящик X. Второй поток - читатель, он забирает
каждый раз одну газету из ящика X. Потоки могут работать синхронно
или асинхронно.
Первый способ - потоки работают синхронно: почтальон каждый день
приносит новые газеты, а читатель каждый день забирает свою газету
из почтового ящика. Поставьте задержку в потоки - 1 секунду.
Второй способ - потоки работают асинхронно: почтальон приносит
новые газеты через каждые три дня, забирая при этом остатки старых газет
с собой, читатель забирает газету один раз в неделю.
Поставьте задержку первому потоку 0,3 секунды, а второму - 1 секунду.
Третий способ - вновь асинхронная работа: почтальон стал приносить
газеты один раз в неделю, а читатель приходит за газетой раз в три дня.
Поставьте задержку первому потоку 1 секунду, а второму - 0,3 секунды.
Четвертый способ - срок доставки газеты меняется хаотически от n1 дней
до n2 дней. Читатель пунктуален - забирает газеты каждый день.
Пятый способ - на сей раз пунктуален почтальон - доставляет свежие газеты
ежедневно. Читатель полагается на изменчивое настроение:
между днями посещения почтового ящика от случая к случаю может проходить
от m1 дней до m2 дней.
Шестой способ - и почтальон и читатель действуют в разнобой,
у почтальона срок доставки меняется от n1 дней до n2 дней,
а у читатель приходит за газетой за промежуток времени,
меняющийся случайно от m1 дней до m2 дней.
Источники
1. Дорогов А. Ю. Синхронизация и взаимодействие программных потоков
в операционной среде реального времени: Учеб. пособие.-
СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2007.- 64 с.