Разделы презентаций


4. Синхронизация потоков

Содержание

4.1. Атомарные действия (операции)

Слайды и текст этой презентации

Слайд 14. Синхронизация потоков

4. Синхронизация потоков

Слайд 24.1. Атомарные действия (операции)

4.1. Атомарные действия (операции)

Слайд 3Определение действия и контекста действия
Действием (action) называется изменение контекста потока.
Контекстом

действия называется область памяти, к которой действие имеет доступ.

Определение действия и контекста действияДействием (action) называется изменение контекста потока.Контекстом действия называется область памяти, к которой действие

Слайд 4Определение атомарного действия
Действие называется атомарным (atomic action), или непрерываемым, или

непрерывным если они удовлетворяет двум требованиям:
не прерывается во время своего

исполнения;
контекст действия изменяется только самим действием.
Атомарные действия будем обозначать следующим образом:
атомарное_действие := <действие>
Определение атомарного действияДействие называется атомарным (atomic action), или непрерываемым, или непрерывным если они удовлетворяет двум требованиям:не прерывается

Слайд 5Две группы атомарных действия
Атомарные действия делят на две группы:
элементарные атомарные

действия (fine grained atomic actions);
составные атомарные действия (coarse grained atomic

actions).
Две группы атомарных действияАтомарные действия делят на две группы:элементарные атомарные действия (fine grained atomic actions);составные атомарные действия

Слайд 6Элементарные атомарные действия
К элементарным атомарным действиям относятся команды микропроцессора, которые

не могут быть прерваны во время своего исполнения.

Элементарные атомарные действияК элементарным атомарным действиям относятся команды микропроцессора, которые не могут быть прерваны во время своего

Слайд 7Непрерываемые команды микропроцессора
Условно (теоретически) считают, что атомарными являются следующие команды

микропроцессора:
операции над данными, хранящимися в регистрах микропроцессора;
операции чтения данных из

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

Непрерываемые команды микропроцессораУсловно (теоретически) считают, что атомарными являются следующие команды микропроцессора:операции над данными, хранящимися в регистрах микропроцессора;операции

Слайд 8Составные атомарные действия
К составным атомарным действиям относятся последовательности элементарных атомарных

действий, которые не прерываются во время своего исполнения.

Составные атомарные действияК составным атомарным действиям относятся последовательности элементарных атомарных действий, которые не прерываются во время своего

Слайд 9Маскирование прерываний
Так как переключение между потоками происходит только по прерываниям,

то на однопроцессорном компьютере атомарность составного действия обеспечивается запрещением (маскированием)

прерываний:
disable_interrupt();
составное_действие;
enable_interrupt();
Маскирование прерыванийТак как переключение между потоками происходит только по прерываниям, то на однопроцессорном компьютере атомарность составного действия

Слайд 10Маскирование прерываний
Запрещение прерываний не обеспечивает атомарность составного действия на мультипроцессорной

системе, т. к. в этом случае контекст действия, исполняемого одним

процессором, может параллельно измениться потоком, исполняемым другим процессором.
Маскирование прерыванийЗапрещение прерываний не обеспечивает атомарность составного действия на мультипроцессорной системе, т. к. в этом случае контекст

Слайд 114.2. Частные и разделяемые переменные

4.2. Частные и разделяемые переменные

Слайд 12Определение частной и разделяемой переменной
Переменная, доступ к которой имеет только

один поток, называется частной (private) или личной переменной потока.
Переменная, доступ

к которой имеют несколько одновременно исполняемых (параллельных, конкурирующих) потоков, называется переменной разделяемой (shared) потоками.
Определение частной и разделяемой переменнойПеременная, доступ к которой имеет только один поток, называется частной (private) или личной

Слайд 13Доступ параллельных потоков к разделяемым переменным
Предполагаем, что параллельные потоки для

доступа (записи или чтения) к разделяемой переменной используют атомарные действия.

Доступ параллельных потоков к разделяемым переменнымПредполагаем, что параллельные потоки для доступа (записи или чтения) к разделяемой переменной

Слайд 14Примеры атомарных и неатомарных действий
shared x, y;
private a, b;

a =

x; // атомарное действие
y = b; // атомарное действие

x = x +

1; // неатомарное действие, которое эквивалентно
// следующей последовательности атомарных действий
private r;
r = x;
++r;
x = r;

x = y; // неатомарное действие, которое эквивалентно
// следующей последовательности атомарных действий
private r;
r = y;
x = r;
Примеры атомарных и неатомарных действий	shared x, y;	private a, b;	a = x;		// атомарное действие	y = b;		// атомарное действие	x

Слайд 154.3. Параллельные потоки

4.3. Параллельные потоки

Слайд 16Параллельные и псевдопараллельные потоки
Одновременно исполняемые потоки называются параллельными, если каждый

из них исполняется своим процессором.
Одновременно исполняемые потоки называются псевдопараллельными или

конкурирующими (concurrent), если они исполняются одним процессором.
Параллельные и псевдопараллельные потокиОдновременно исполняемые потоки называются параллельными, если каждый из них исполняется своим процессором.Одновременно исполняемые потоки

Слайд 17Обмен сигналами между параллельными потоками
Мы рассматриваем параллельные потоки как программы,

параллельно исполняемыми на одном компьютере.
В общем случае параллельные потоки могут

обмениваться сигналами только через общую память.
В случае параллельных потоков, исполняемых в контексте одного процесса, общая память представляется разделяемыми (глобальными) переменными.
Обмен сигналами между параллельными потокамиМы рассматриваем параллельные потоки как программы, параллельно исполняемыми на одном компьютере.В общем случае

Слайд 18Аксиомы параллельности
Аксиома 1 (Non-interference postulate). Параллельные потоки, которые не имеют

общих разделяемых переменных, не взаимодействуют (интерферируют) друг с другом.

Аксиома 2

(Atomicity postulate). Операции чтения и записи значения частной переменной потока в разделяемые переменные являются атомарными.

Аксиома 3 (Interleaving postulate – Постулат чередования). Результатом исполнения псевдопараллельных (конкурирующих) потоков является последовательность атомарных действий этих потоков.
Аксиомы параллельностиАксиома 1 (Non-interference postulate). Параллельные потоки, которые не имеют общих разделяемых переменных, не взаимодействуют (интерферируют) друг

Слайд 19Гонка потоков
Если результат исполнения псевдопараллельных потоков зависит от последовательности атомарных

действий, исполняемых этими потоками, то говорят, что эти потоки находятся

в состоянии гонки (race condition).
Как правило, состояние гонки является причиной ошибок работы многопоточных приложений.
Причиной состояния гонки потоков является неправильная синхронизация этих потоков.
Гонка потоковЕсли результат исполнения псевдопараллельных потоков зависит от последовательности атомарных действий, исполняемых этими потоками, то говорят, что

Слайд 204.4. Определение синхронизации

4.4. Определение синхронизации

Слайд 21Определение синхронизации
Неформально, под синхронизацией параллельных потоков понимают обмен между этими

потоками управляющими сигналами, которые координируют их исполнение.
Если рассматривать параллельные потоки

формально, то синхронизация таких потоков это достижение некоторого фиксированного порядка (соотношения) между управляющими сигналами, которыми обмениваются эти потоки.
Определение синхронизацииНеформально, под синхронизацией параллельных потоков понимают обмен между этими потоками управляющими сигналами, которые координируют их исполнение.Если

Слайд 22Порядок управляющих сигналов обеспечивает некоторые фиксированные последовательности атомарных действий, исполняемых

параллельными потоками.
Следовательно, можно сказать, что синхронизация параллельных потоков – это

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

Слайд 23Определение условного атомарного действия
Поэтому, под синхронизацией параллельных потоков понимаем исполнение

потоком атомарного действия в зависимости от некоторого условия.
Такое атомарное действие

называется условным.
Другими словами, с точки зрения синхронизации потоков каждый поток последовательно исполняет условные атомарные действия.
Определение условного атомарного действияПоэтому, под синхронизацией параллельных потоков понимаем исполнение потоком атомарного действия в зависимости от некоторого

Слайд 24Обозначение условного атомарного действия
Введем для условного атомарного действия следующее

обозначение:

где условие является логическим (булевым) выражением, значением которого является

истина или ложь.
Обозначение условного атомарного действия Введем для условного атомарного действия следующее обозначение:	где условие является логическим (булевым) выражением, значением

Слайд 25Исполнение условного атомарного действия
Условное атомарное действие выполняется следующим образом:
оператор await

ждет до тех пор, пока значение условия не станет истинным;
как

только условие стало истинным, выполняется действие.
В общем случае не существует эффективной реализации условного атомарного действия.
Поэтому на практике рассматривают его частные случаи:
взаимное исключение,
условная синхронизация.
Исполнение условного атомарного действияУсловное атомарное действие выполняется следующим образом:оператор await ждет до тех пор, пока значение условия

Слайд 26Взаимное исключение.
:=
В этом случае происходит безусловное выполнение

атомарного действия.
Этот случай называется взаимным исключением.
Код, исполняемый внутри атомарного действия,

называется критической секцией.

Взаимное исключение

Взаимное исключение.	 := В этом случае происходит безусловное выполнение атомарного действия.Этот случай называется взаимным исключением.Код, исполняемый внутри

Слайд 27Условная синхронизация
Условная синхронизация.

В этом случае оператор await просто оповещает

о наступлении некоторого события, т. е. что произошло некоторое действие.
Этот

случай называется условная синхронизация.
Условная синхронизация Условная синхронизация.	В этом случае оператор await просто оповещает о наступлении некоторого события, т. е. что

Слайд 284.5. Проблема взаимного исключения

4.5. Проблема взаимного исключения

Слайд 29Формулировка проблемы
Проблема взаимного исключения возникает при решении задачи ограничения совместного

доступа параллельных потоков к общему ресурсу.
Формулировка проблемы: требуется обеспечить, чтобы

в любой момент времени с общим ресурсом мог работать только один из параллельных потоков.
Для решения этой задачи, программный код, который работает с общим ресурсом, заключается в критическую секцию.
Формулировка проблемыПроблема взаимного исключения возникает при решении задачи ограничения совместного доступа параллельных потоков к общему ресурсу.Формулировка проблемы:

Слайд 30Требования к решению задачи взаимного исключения
Безопасность (safety requirement) – в

любой момент времен в критической секции может находиться только один

поток;
Поступательность (progress requirement) – любой поток должен находиться в критической секции ограниченное время (нет тупиков);
Справедливость (fairness requirement) – любой поток получает доступ в критическую секцию за ограниченное время (нет голодания).
Требования к решению задачи взаимного исключенияБезопасность (safety requirement) – в любой момент времен в критической секции может

Слайд 31Можно отметить, что из выполнения требования 3 следует выполнение требования

2.
Однако требование 3 иногда невозможно выполнить.
В этом случае доказывают, что

решение задачи удовлетворяет только требованию 2.
Можно отметить, что из выполнения требования 3 следует выполнение требования 2.Однако требование 3 иногда невозможно выполнить.В этом

Слайд 324.6. Программное решение проблемы взаимного исключения

4.6. Программное решение проблемы взаимного исключения

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

впервые дано Петерсоном (Peterson G. L., 1981).

Программное решение проблемы взаимного исключения для двух параллельных потоков было впервые дано Петерсоном (Peterson G. L., 1981).

Слайд 34Алгоритм Петерсона
bool x1, x2;
int q; // обеспечивает ассиметричное решение

задачи взаимного исключения

x1 = false;
x2 = false;

void thread1()
{
while (true)
{
nonCriticalSection1();

x1 = true; // поток 1 хочет войти в критическую секцию
q = 2; // но, сначала предоставляет право входа потоку 2
while (x2 && q == 2); // ждет, пока поток 2 находится в своей критич. секции
criticalSection1();

x1 = false;
}
}
Алгоритм Петерсона bool x1, x2; int q;	// обеспечивает ассиметричное решение задачи взаимного исключения  x1 = false;

Слайд 35 void thread2()
{
while (true)

{
nonCriticalSection2();

x2 =

true;
q = 1;
while (x1 && q == 1);
criticalSection2();

x2 = false;
}
}
void thread2() {   while (true)   {    nonCriticalSection2();

Слайд 36Доказательство правильности алгоритма Петерсона
1. Безопасность.
Поток thread1 находится в критической секции

1 только в том случае, если выполняется условие:



Кроме того, если

поток thread1 находится в критической секции 1, то выполняется условие:


Доказательство правильности алгоритма Петерсона1. Безопасность.Поток thread1 находится в критической секции 1 только в том случае, если выполняется

Слайд 37Определим следующий предикат:

который является инвариантом критической секции 1, т. е.

если поток thread1 находится внутри критической секции 1, то выполняется

условие:

Аналогично, введем инвариант для критической секции 2:
Определим следующий предикат:который является инвариантом критической секции 1, т. е. если поток thread1 находится внутри критической секции

Слайд 38Теперь рассмотрим предикат:




В результате получили, что

Следовательно, потоки thread1 и thread2

не могут одновременно находиться в своих критических секциях.

Теперь рассмотрим предикат:В результате получили, чтоСледовательно, потоки thread1 и thread2 не могут одновременно находиться в своих критических

Слайд 392. Поступательность.
Поток thread1 может быть заблокирован только при условии, если

Аналогично,

поток thread2 может быть заблокирован только при условии, если

2. Поступательность.Поток thread1 может быть заблокирован только при условии, еслиАналогично, поток thread2 может быть заблокирован только при

Слайд 40Рассмотрим предикат



Следовательно, потоки thread1 и thread2 не могут быть заблокированы

одновременно.

Рассмотрим предикатСледовательно, потоки thread1 и thread2 не могут быть заблокированы одновременно.

Слайд 413. Справедливость.
Предположим обратное, т. е., что поток thread1 заблокирован. Тогда

выполняется условие

(1)

Отсюда следует, что

3. Справедливость.Предположим обратное, т. е., что поток thread1 заблокирован. Тогда выполняется условие								(1)Отсюда следует, что

Слайд 42Но из пункта 2 следует, что поток thread2 не может

быть заблокирован одновременно с потоком thread1.
Откуда следует, что выполняется условие

Следовательно,

поток thread2 пройдет цикл while и установит значения
или
что противоречит условию (1).
Следовательно, наше предположение неверно.
Поэтому требование справедливости также выполняется.
Но из пункта 2 следует, что поток thread2 не может быть заблокирован одновременно с потоком thread1.Откуда следует,

Слайд 434.7. Программное решение условной синхронизации

4.7. Программное решение условной синхронизации

Слайд 44Решение проблемы условной синхронизации для двух потоков
bool event;
event

= false;

  void thread1()
{
beforeEvent1();
while(!event);

// ждать наступления события
afterEvent1();
}
Решение проблемы условной синхронизации для двух потоков bool event; event = false;  void thread1() {  beforeEvent1();

Слайд 45 void thread2()
{
beforeEvent2();
event = true;

// установить событие
afterEvent2();
}
Очевидно, что поток thread1

выполнит функцию afterEvent1 только в том случае, если поток thread2 установит истинным значение переменной event.
void thread2() {  beforeEvent2();  event = true;	  // установить событие  afterEvent2(); }Очевидно,

Слайд 464.8. Непрерываемые (атомарные) команды микропроцессора

4.8. Непрерываемые (атомарные) команды микропроцессора

Слайд 47Определение атомарных команд микропроцессора
Для решения задач синхронизации в микропроцессорах существуют

команды, которые изменяют содержимое памяти атомарным образом, т. е. не

прерываются во время своего исполнения.
При исполнении такой команды микропроцессор «запирает» (закрывает доступ) шину передачи данных.
Поэтому эти команды могут использоваться для синхронизации потоков, исполняемых на разных процессорах.
Определение атомарных команд микропроцессораДля решения задач синхронизации в микропроцессорах существуют команды, которые изменяют содержимое памяти атомарным образом,

Слайд 48Команда xchg
В микропроцессоре Intel x86 существует команда xchg (а в

настоящее время и много других команд), которая не прерывается во

время своего исполнения и реализует следующую функцию:
  void xchg(register int r, int* x)
{
register int temp;
 
temp = r;
r = *x;
*x = temp;
}

Команда xchgВ микропроцессоре Intel x86 существует команда xchg (а в настоящее время и много других команд), которая

Слайд 49Решение проблемы взаимного исключения для N-параллельных потоков
С помощью команды xchg

можно решить проблему взаимного исключения для N-параллельных потоков, каждый из

которых исполняются отдельным процессором.

Решение проблемы взаимного исключения для N-параллельных потоковС помощью команды xchg можно решить проблему взаимного исключения для N-параллельных

Слайд 50Решение
int lock = 0;
  void thread_i()
{

while (true)
{

register int key_i = 1; // ключ для входа в критическую секцию
while (key_i == 1) // ждем, пока вход закрыт
xchg(key_i, &lock);
criticalSection_i();
xchg(key_i, &lock); // выход из критической секции
nonCriticalSection_i();
}
}
Решение  int lock = 0;  void thread_i()  {    while (true)

Слайд 51Доказательство правильности работы алгоритма
1. Безопасность.
Доказываем от противного.
Предположим, что
и
при

некоторых
.
Это может быть только в том случае, если одна

команда xchg прервала исполнение другой такой команды.
Но это невозможно, так как команда xchg атомарная.
Следовательно, наше предположение неверно и в критической секции может находиться только один из потоков.
Доказательство правильности работы алгоритма1. Безопасность.Доказываем от противного.Предположим, что и при некоторых		. Это может быть только в том

Слайд 522. Поступательность.
Доказываем от противного.
Предположим, что все потоки выполняют циклы
while (key_i

== 1) // ждем, пока вход закрыт
xchg(key_i,

&lock);
Отсюда следует, что

Но это невозможно, так как величина

является инвариантом в силу атомарности команды xchg.
Следовательно, тупик невозможен.
2. Поступательность.Доказываем от противного.Предположим, что все потоки выполняют циклы		while (key_i == 1)  	// ждем, пока вход

Слайд 533. Справедливость.
О справедливости нельзя сказать ничего определенного, так как не

задан порядок доступа процессоров к шине данных.

3. Справедливость.О справедливости нельзя сказать ничего определенного, так как не задан порядок доступа процессоров к шине данных.

Слайд 54Занятие ожиданием
Программная и аппаратная реализации синхронизации имеют существенный недостаток:
впустую

тратится процессорное время в циклах ожидания while для разрешения входа

в критическую секцию.
Поэтому все эти алгоритмы синхронизации получили общее название занятие ожиданием (busy waiting).
Занятие ожиданиемПрограммная и аппаратная реализации синхронизации имеют существенный недостаток: впустую тратится процессорное время в циклах ожидания while

Слайд 55Спин-лок
Однако, аппаратная реализация синхронизации используется в мультипроцессорных системах, так как

нет другого решения.
Цикл ожидания while с атомарными командами микропроцессора называется

спин-локом, или спин-блокировкой, или активным ожиданием (spin lock, иногда live lock).
Спин-локОднако, аппаратная реализация синхронизации используется в мультипроцессорных системах, так как нет другого решения.Цикл ожидания while с атомарными

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика