- •Алгоритмы
- •План
- •Литература
- •Необходимость
- •Пример: файл данных
- •Критические участки
- •Взаимоисключающий
- •Атомарные операции
- •Пример: вставка в
- •Синхронизация в системах с общей памятью
- •Атомарные операции с общей памятью
- •Блокировки
- •Захват и освобождение блокировок
- •Обеспечение атомарности с помощью блокировки
- •Предотвращение состояний конкуренции
- •Взаимоблокировка
- •Самоблокировка
- •Предотвращение
- •Еще раз о состоянии конкуренции
- •Спин-блокировки
- •Спин блокировка с атомарными операциями
- •Блокировки без атомарных операций
- •Свойства
- •Доказательство
- •Доказательство отсутствия бесконечного ожидания
- •Алгоритмы для N процессоров
- •Блокировка в состоянии конфликта
- •Эффективность блокировок
- •Спин-блокировки для реальных систем
- •Блокировки чтения-записи
- •Пример использования блокировки чтения-записи
- •Пример реализации rw блокировки
- •Отказ обслуживания записи при обслуживании чтения
- •Блокировки чтения-записи с приоритетом на запись
- •Использование секвентных блокировок
- •Реализация seqlock
- •Недостатки spinlock
- •Семафоры
- •Операции с семафорами
- •Mutex
- •Пример:
- •Счетный семафор
- •Реализация семафоров
- •Пример реализации семафора
- •Семафоры чтения записи
- •Особенности семафоров
- •Условные переменные
- •Пример использование
- •Мониторы
- •Барьер
- •Блокировки в системах с распределенной памятью
- •Пример реализации барьера
- •Вопросы?
Алгоритмы
синхронизации
Судаков А.А.
“Параллельные и распределенные вычисления” Лекция 15
План
Необходимость синхронизации
Синхронизация в системах с общей памятью
Спин-блокировки
Секвентные блокировки
Семафоры
Условные переменные
Синхронизация в системах с распределенной памятью
Барьер
Литература
Лекции по параллельным и распределенным вычислениям http://www.cs.brown.edu/courses/cs176/
Необходимость
синхронизации
Синхронизация – обеспечение того, что взаимодействующие процессы находятся в строго определенном состоянии
Синхронизация необходима для того, чтобы гарантировать непротиворечивость (консистентность данных)
Пример: файл данных
Процесс 1
Записывает данные расчета в файл
Процесс 2
Считывает из файла данные, записанные процессом 1 и работает с ними
Проблема
Чтобы процесс 2 нормально отработал, необходимо, чтобы перед считыванием данных данные уже были в файле
Как решить
Обеспечить гарантию, что процесс 2 начнет считывать данные только после того, как процесс 1 их запишет
Пример 2: общая переменная a=1
Поток1 : считываем a a=1
Поток2 : увеличивает a на 1 a=2
Поток1 : записывает a назад a=2
Поток2 : считываем a a=2
Поток2 : увеличивает a на 1 a=3
Поток2: записывает a назад a=3
Результат - правильный
Поток1 : считываем a a=1
Поток2 : считываем a a=1
Поток1 : увеличивает a на 1 a=2
Поток2 : увеличивает a на 1 a=2
Поток 2: записывает a назад a=2
Поток1: записывает a назад a=2
Результат - неправильный
Критические участки
Критический участок – это код, который оперирует с совместно используемыми данными
Состояние конкуренции за ресурс (race condition) – ситуация в которой параллельный доступ к данным может привести к тому, что данные окажутся в неопределенном или разрушенном состоянии
Взаимоисключающий
доступ
Чтобы гарантировать консистентность данных – необходимо, чтобы все обращения к данным, которые могут привести к их разрушению выполнялись строго последовательно – взаимоисключающим образом
Атомарные операции
Атомарные операции – операции, которые выполняются не прерываясь и не перекрываясь.
Две атомарные операции с одними и теми же данными могут выполняться строго последовательно
Пример: вставка в
связанный список |
|
Элемент 1 |
||
|
|
|
|
|
Поток 1 |
|
|
|
|
|
|
|
|
|
Вставляет элемент new перед |
|
|
|
|
Элемент new |
|
|
|
|
|
|
|
||
элементом 2 |
|
|
|
|
|
|
|
|
Поток 2
Удаляет элемент 2
Проблема
Если не принять соответствующих мер, то элемент new может остаться указывать на удаленный элемент
Решение – все операции вставки- удаления элементов должны быть атомарными
Элемент 2
Элемент 3