Особенности реализации объектов синхронизации в ОС Unix
Фрагменты из лекции
Детерминированность
Набор программ, работающих с общими данными, детерминирован если при псевдопараллельном его выполнении для одинаковых входных данных он будет обеспечивать одинаковые результаты
Параллельное выполнение недетерминированных программ приводит к редким, трудно обнаруживаемым и отлаживаемым ошибкам.
Критическая секция
Часть программы, в которой есть обращение к общим данным, называется критической секцией.
Условия детерминированности и работоспособности параллельных программ:
два процесса не должны одновременно находится в критических секциях;
Атомарность. Виды ожидания
Операция называется атомарной, если во время ее выполнения не может происходить переключения процессора на другой процесс (поток).
Ожидание блокировки называют:
активным, если программа в цикле проверяет выполнение условия окончания блокировки;
пассивным, если операционная система переводит процесс (поток) в состояние блокированного до окончания блокировки.
в программе не должно быть предположений о скорости или количестве процессоров;
процесс, находящийся вне критической секции, не может блокировать другие процессы;
невозможна ситуация, в которой процесс вечно ждет попадания в критическую секцию.
Объекты синхронизации
Мьютекс (mutual exclusive) — двоичная переменная, находящаяся в двух состояниях — свободном и занятом. Операция «проверить» ждет освобождения мьютекса и переводит его в занятое состояние, операция «освободить» переводит в свободное состояние.
Семафор — целая переменная с неотрицательным значением. Операция «проверить» вычитает значение семафора, если он положителен, и ожидает увеличения если равен нулю. Операция «освободить» увеличивает значение семафора на 1.
Синхронизация в ОС Windows
Функция Sleep
Объекты синхронизации
Функции ожидания
Критические секции
Функция Sleep
VOID Sleep(DWORD dwMilliseconds);
Переводит поток в состояние блокировки на указанное количество милисекунд.
В качестве значения параметра можно использовать макрос INFINITE.
Поток не продолжит работу в течении не менее чем указанное количество времени.
Объекты синхронизации ОС Windows
Объекты синхронизации ОС Windows — это объекты, которые имеют дескрипторы и могут находится в двух состояниях: сигналированом и несигналированом.
Объекты синхронизации используются в функциях ожидания.
Функция ожидания позволяет процессу дождаться сигналирования одного или нескольких объектов.
Все операции над объектами синхронизации (в т.ч. производимые функциями ожидания) атомарны.
Мьютекс
Мьютекс — бинарный объект синхронизации. В каждый момент времени он свободен (сигналирован) или принадлежит какому-либо потоку (несигналирован).
Успешно завершенная функция ожидания захватывает мьютекс. Для его освобождения поток использует функцию releaseMutex
Если поток начал ожидание на мьютексе, которым уже владеет, то оно немедленно заканчивается. Функцию ReleaseMutex для освобождения необходимо вызвать столько раз, сколько была вызвана функция ожидания.