
- •Алгоритмы
- •План
- •Литература
- •Необходимость
- •Пример: файл данных
- •Критические участки
- •Взаимоисключающий
- •Атомарные операции
- •Пример: вставка в
- •Синхронизация в системах с общей памятью
- •Атомарные операции с общей памятью
- •Блокировки
- •Захват и освобождение блокировок
- •Обеспечение атомарности с помощью блокировки
- •Предотвращение состояний конкуренции
- •Взаимоблокировка
- •Самоблокировка
- •Предотвращение
- •Еще раз о состоянии конкуренции
- •Спин-блокировки
- •Спин блокировка с атомарными операциями
- •Блокировки без атомарных операций
- •Свойства
- •Доказательство
- •Доказательство отсутствия бесконечного ожидания
- •Алгоритмы для N процессоров
- •Блокировка в состоянии конфликта
- •Эффективность блокировок
- •Спин-блокировки для реальных систем
- •Блокировки чтения-записи
- •Пример использования блокировки чтения-записи
- •Пример реализации rw блокировки
- •Отказ обслуживания записи при обслуживании чтения
- •Блокировки чтения-записи с приоритетом на запись
- •Использование секвентных блокировок
- •Реализация seqlock
- •Недостатки spinlock
- •Семафоры
- •Операции с семафорами
- •Mutex
- •Пример:
- •Счетный семафор
- •Реализация семафоров
- •Пример реализации семафора
- •Семафоры чтения записи
- •Особенности семафоров
- •Условные переменные
- •Пример использование
- •Мониторы
- •Барьер
- •Блокировки в системах с распределенной памятью
- •Пример реализации барьера
- •Вопросы?

Барьер
Барьер – коллективная синхронизация
Гарантия того, что те или иные операции выполнены всеми потоками, процессами
Операции до барьера Чтение 1 Запись 2 Запись 3 Чтение 3 Операции могут
переставляться или откладываться
Барьер – выполняем все предыдущие операции
Операции после барьера

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

Пример реализации барьера
Каждый процесс вызывает функцию
Allreduce();
//ждем, пока не получим необходимых данных от всех остальных процессов
