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

Алгоритмы

синхронизации

Судаков А.А.

“Параллельные и распределенные вычисления” Лекция 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

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