Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Судаков / Лекции / lec15_sinxr.ppt
Скачиваний:
24
Добавлен:
20.03.2015
Размер:
253.44 Кб
Скачать

Синхронизация в системах с общей памятью

Память общая –> возможность доступа к общим данным –> возможность конкуренции за ресурс

Очень часто необходима синхронизация доступа к данным

Удобство и скорость доступа к общим данным компенсируется необходимостью использования синхронизации

Атомарные операции с общей памятью

Часть операций обеспечивается аппаратными инструкциями

Целочисленное сложение в ячейке памяти

Битовые операции

Для сложных операций необходимо использовать программные средства синхронизации

блокировки связанного списка

Для RISC процессоров часто даже для простых операций приходится использовать программные средства

Блокировки

Блокировка – ресурс (переменная), который обеспечивает к себе взаимоисключающий доступ

Блокировки

Обязательные (mandatory) – при обращении к ресурсу блокировка захватывается обязательно

Рекомендуемые (advisory) – при обращении к ресурсу блокировка захватывается по желанию разработчика

Захват и освобождение блокировок

С блокировками возможны две операции

Захват

Освобождение

В захваченном состоянии блокировку может удерживать только один поток (процесс)

После освобождения блокировку снова можно захватывать

Обеспечение атомарности с помощью блокировки

lock – общая переменная

lock – общая переменная

List – общий связанный

List - общий связанный

список

список

Поток 1

Поток 2

Захватить(lock)

Захватить(lock)

Если захват успешный, то все остальные будут ждать захвата

Если захват успешный, то все остальные будут ждать захвата

 

Вставка (list)

 

Удаление (list)

 

Освободить(lock)

 

Освободить(lock)

Предотвращение состояний конкуренции

Доступ к совместно используемым ресурсам необходимо блокировать

В критических участках необходимо использовать блокировки

Блокировать необходимо данные, а не код!

Блокировки необходимо связывать с совместными данными

Взаимоблокировка

(deadlock)

Общие блокировки Lock_a, lock_b

Процесс 1 Захватить (lock_a) Захватить (lock_b)

Вечно ожидаем освобождения lock_b

lock_b не может быть освобождена, процесс 2 застрял на lock_a

Общие блокировки Lock_a, lock_b

Процесс 2 Захватить (lock_b) Захватить (lock_a)

Вечно ожидаем освобождения lock_a

lock_a не может быть освобождена, процесс 2 застрял на lock_b

Самоблокировка

Блокировка lock Процесс

Захватить (lock)

..

Захватить (lock)

Попытка захватить уже захваченную и никогда не освобождаемую блокировку приведет к зависанию

Предотвращение

взаимоблокировок

На каждую операцию захвата любой блокировки необходима операция освобождения

Разные блокировки в разных процессах необходимо захватывать в строго определенном порядке

Освобождать желательно в обратном порядке (хотя и не обязательно)

Еще раз о состоянии конкуренции

Лишняя операция освобождения может привести к состоянию конкуренции

Процесс

Захват()

Освобождение()

Освобождаем захваченную нами блокировку (ресурс свободен)

Освобождение()

Освобождаем захваченную кем-то другим блокировку

Предоставляем конкурентный доступ к ресурсу кому-то третьему

Соседние файлы в папке Лекции